質問をすることでしか得られない、回答やアドバイスがある。

15分調べてもわからないことは、質問しよう!

新規登録して質問してみよう
ただいま回答率
85.35%
PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

Q&A

2回答

1947閲覧

Laravelのwithとpaginateを引数として渡す

renren643

総合スコア279

PHP

PHPは、Webサイト構築に特化して開発されたプログラミング言語です。大きな特徴のひとつは、HTMLに直接プログラムを埋め込むことができるという点です。PHPを用いることで、HTMLを動的コンテンツとして出力できます。HTMLがそのままブラウザに表示されるのに対し、PHPプログラムはサーバ側で実行された結果がブラウザに表示されるため、PHPスクリプトは「サーバサイドスクリプト」と呼ばれています。

Laravel 5

Laravel 5は、PHPフレームワークLaravelの最新バージョンで、2014年11月に発表予定です。ディレクトリ構造がが現行版より大幅に変更されるほか、メソッドインジェクションやFormRequestの利用が可能になります。

0グッド

0クリップ

投稿2020/11/11 09:10

編集2020/11/11 12:56

Laravelの機能で、
・eacger loadしてくれるメソッドのwith
・ページネーションしてくれるメソッドのpaginate

というものがあり、大変便利ではあると思うのですが,
withやpaginateを使う、または使わないというのを引数で指定するというのはメソッドの作りとして良いのでしょうか?

例えば、
Postという投稿があるとし

投稿一覧を取得できるような以下のようなメソッドを作成するということです。

public function getPosts($with = [], $isPaginate = false) { $posts = Post::with($with); if($isPaginate){ $posts->paginate(10) } return $posts->get(); }

このメソッドは
このように呼び出すことで

$this->getPosts(['comments'], true);

投稿とそれに紐づくコメントを取得し、ページネーションの形式で渡してくれます
また、このように呼び出すことで

$this->getPosts(['user'], true);

postしたユーザーを一緒に取得でき、
また以下で

$this->getPosts();

投稿一覧のcollectionを返してくれます。
一見便利そうなのですが、メソッドの作りとして
いかがでしょうか?

懸念するのは、
CollectionかLengthAwarePaginatorのオブジェクトを返すかわからないため、戻り値のタイプヒンティングをかけないということです。
また、
特にこのようにやっている人が見当たらなかったので不安に思い質問しました。

気になる質問をクリップする

クリップした質問は、後からいつでもMYページで確認できます。

またクリップした質問に回答があった際、通知やメールを受け取ることができます。

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

guest

回答2

0

引数の値がどこからやってくるものなのかによる気がする。

とはいえ、コントローラには書かないと思います。

model に scope で実装するかな…

php

1class Post extends Model 2{ 3 public function scopeWithComments(Builder $builder) 4 { 5 return $builder->with(['comments']); 6 } 7}

と思ったけど、paginate() は Collection 返すから、スコープでは実装できませんね。

投稿2020/11/11 12:47

編集2020/11/11 12:51
phper.k

総合スコア3923

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renren643

2020/11/11 12:58

追記したんですが、comments決めうちじゃなくて動的に引数で渡したいんですよね.,,,, 当然コントローラには書かないですが, getPostsメソッドはサービスクラスか,レポジトリクラスに記載するつもりでした。
phper.k

2020/11/11 13:21 編集

一応scopeも引数で渡すことができます。 あまり意味ないですけどね。 ただ、どうしてこのような実装をする必要があるかの方が気になります。 自分の場合、その必要があるようなシステムを開発したことがありません。
renren643

2020/11/11 16:06 編集

SPAなのですが ・投稿一覧をコメント付きで取得=>フロントにjsonで返却する際には、postでcommentsをeagerloadしつつpaginateできるようにしたい ・ Userの全員に対してバッチ処理をする際にはpaginateは不要 的な感じですかね
phper.k

2020/11/12 03:41

そういう目的だったら、自分は一つにまとめるようなことはしないでしょうね。 目的ごとに関数は分けると思います。
guest

0

そのくらいなら好きなように書けばいいけど
Buildingモデル内に書いたほうがいいのでは。

投稿2020/11/11 09:26

退会済みユーザー

退会済みユーザー

総合スコア0

バッドをするには、ログインかつ

こちらの条件を満たす必要があります。

renren643

2020/11/11 09:48

回答ありがとうございます。 すみません、コード修正しました。 Postモデル内に書いたほうがいいってことですよね
guest

あなたの回答

tips

太字

斜体

打ち消し線

見出し

引用テキストの挿入

コードの挿入

リンクの挿入

リストの挿入

番号リストの挿入

表の挿入

水平線の挿入

プレビュー

まだベストアンサーが選ばれていません

会員登録して回答してみよう

アカウントをお持ちの方は

15分調べてもわからないことは
teratailで質問しよう!

ただいまの回答率
85.35%

質問をまとめることで
思考を整理して素早く解決

テンプレート機能で
簡単に質問をまとめる

質問する

関連した質問