Laravel 5.4 を使用したWebアプリを作成中です。
基本的な仕組みは出来たのですが、並べ替えについて質問です。
PHP
1class Item extends Model 2{ 3 public function myPrice () { 4 if (\Auth::User()->role == 'admin') { 5 $result = $this->master_price; 6 } else { 7 $data = $this->prices()->where('user_id', \Auth::User()->id)->first(); 8 $result = (is_null($data) ? $this->master_price : $data->price); 9 } 10 return $result; 11 } 12 13 public function prices() 14 { 15 return $this->hasMany(Price::class); 16 } 17}
Controller内で、このモデルクラスのmyPrice()を元に「orderBy」をかけたく思います。
※追記ここから
サンプルにする為コードを単純化していたのですが、単純にしすぎていました。
実際は上記のようなリレーションを挟んでの処理になります。
「該当のリレーションデータが存在しない場合は自クラスのデータを使う」という処理が入ります。
(自クラスのデータは絶対に入っています)
後出し仕様になってしまって申し訳ありません。
※追記ここまで
$itemList = Item::where('aaa', 'bbb')->orderBy('updated_by', 'desc')->paginate(20);
とりあえず上記コードが動くことは確認しました。
が、orderBy('myPrice', 'asc')
にすると(当然ながら)動きません。
Controller側でmyPriceと同じ条件分岐をすればいい話なのですが、出来れば同じ処理を2つ書きたくありません。
Item::where('aaa', 'bbb')->get()
したデータを元に配列作成、それをソートする方法もあると思いますが、
そうした場合paginateが使えないのでは?と思っています。
何か良い方法があればお教え頂けると助かります。
回答2件
あなたの回答
tips
プレビュー