1class ItemShop extendsPivot2{3protected$table='item_shop';45publicfunctionscopeOrderByLowestMoney(Builder$query):Builder6{7return$query8->join('information','item_shop.id','=','information.item_shop_id')9->leftJoin('information as filter',function(JoinClause$join){10$join->on('information.item_shop_id','=','filter.item_shop_id');11$join->on(function(JoinClause$join){12$join->on('information.id','>','filter.id');13$join->on('information.money','=','filter.money');14$join->orOn('information.money','>','filter.money');15});16})17->whereNull('filter.id')18->select('item_shop.*')19->orderBy('information.money')20->orderBy('information.id');21}2223publicfunctionscopeWhereItem(Builder$query,...$args):Builder24{25return$query26->join('items','item_shop.item_id','=','items.id')27->where(function(Builder$query)use($args){28$query->setModel(newItem())->where(...$args);29});30}3132publicfunctionitem():BelongsTo33{34return$this->belongsTo(Item::class);35}3637publicfunctionshop():BelongsTo38{39return$this->belongsTo(Shop::class);40}4142publicfunctioninformation():HasMany43{44return$this->hasMany(Information::class);45}46}
(蛇足ですが,MySQL 8.0 以降または PostgreSQL の場合は,ウィンドウ関数を使うと「LEFT JOIN ... WHERE id IS NULL」の Not Exists 最適化狙いのクエリよりも高い可読性と高いパフォーマンスを両立できます。今回はあくまで MySQL 5.x 向けのクエリです)
バッドをするには、ログインかつ
こちらの条件を満たす必要があります。
2019/05/03 05:42
2019/05/03 08:10 編集
2019/05/03 10:32
2019/05/03 10:42
2019/05/03 10:56
2019/05/03 11:47
2019/05/03 14:36
2019/05/03 18:41
2019/05/03 18:58