我有这个票务模型:
class Ticket extends Model
{
public function items()
{
return $this->hasMany('App\Models\TicketItem', 'ticket_id', 'id');
}
}
和TicketItem模型:
class TicketItem extends Model {
public function product()
{
return $this->belongsTo('App\Models\Product');
}
}
和产品型号:
class Product extends Model {
public function category()
{
return $this->belongsTo('App\Models\Category');
}
}
产品有一个名为category_id
的字段。
当我执行App\Models\Ticket::find(123)->load('items.product.category')
时,我希望ticket.items
按ticket.items.product.category_id.
排序
答案 0 :(得分:0)
以下应该可以解决问题:
App\Models\Ticket::find(123)->load(['items' => function($query) {
$query->join('products', 'product_id', '=', 'products.id')
->orderBy('category_id', 'ASC');
})->load('items.product.category');
这将告诉Eloquent,在加载项时,应应用回调中的其他条件。在这里,您可以将商品与产品结合在一起,并按 category_id 对商品进行排序。
更新:为避免列名冲突,可以对表名使用别名:
App\Models\Ticket::find(123)->load(['items' => function($query) {
$query->from('ticket_items as tis')
->join('products as ps', DB::raw('its.product_id'), '=', DB::raw('ps.id'))
->select(DB::raw('tis.*'))
->orderBy('category_id', 'ASC');
})->load('items.product.category');