Php 来自DB的Laravel雄辩

Php 来自DB的Laravel雄辩,php,laravel,eloquent,Php,Laravel,Eloquent,我有一个非常复杂的数据库查询,但我想知道,是否有可能缩短它,并通过雄辩使其更容易? 我的模型和他的数据库是: class Order extends Model { public $timestamps = false; public $incrementing = false; public function products() { return $this->hasMany(OrderProducts::class); } public function statuses

我有一个非常复杂的数据库查询,但我想知道,是否有可能缩短它,并通过雄辩使其更容易? 我的模型和他的数据库是:

class Order extends Model
{
public $timestamps = false;
public $incrementing = false;

public function products()
{
    return $this->hasMany(OrderProducts::class);
}

public function statuses()
{
    return $this->belongsToMany(OrderStatusNames::class, 'order_statuses', 'order_id', 'status_id');
}

public function actualKioskOrders()
{
 return 
    $rows = DB::select("SELECT o.id, o.number, o.name client_name, o.phone, 
     o.email, o.created_at order_date,  osn.name actual_status 
     FROM orders o 
     JOIN order_statuses os ON os.order_id = o.id 
     JOIN (SELECT o.id id, MAX(os.created_at) last_status_date FROM orders o 
     JOIN order_statuses os ON os.order_id = o.id GROUP BY o.id) t 
     ON t.id = os.order_id AND t.last_status_date = os.created_at 
     JOIN order_status_names osn ON osn.id = os.status_id
     WHERE os.status_id != 3");
}

}

你当然可以。Laravel查询生成器实现您所需的一切

看,它有,而且

例如,您可以执行以下操作:

Order::select(['id','number', 'name', 'client_name'])
->where('status_id', '!=', 3)
->join('order_statuses', 'order_statuses.order_id, '=', 'orders.id')
->get()

这只是一个关于如何创建查询的示例。链接创建查询所需的许多方法,文档显示了许多方法,包括使用更复杂的连接(如果需要)。

Wow,但此选择仅适用于本例中的订单?因为我还需要来自另一个联接表的其他列的数据。我可以在select中对此进行评估吗?可以,就像在sql查询中一样,使用表名作为前缀。这将返回一个包含所选列的模型集合。哦,要将我的查询更改为雄辩实在太难了!