简体   繁体   English

来自DB的Laravel雄辩

[英]Laravel eloquent from DB

I have a very complicated db query, but I would like to know or is a possibility to short it and make it easier by eloquent? 我有一个非常复杂的数据库查询,但是我想知道还是有可能将其缩短并使其变得更加容易? My Model and his db is : 我的模型和他的数据库是:

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");
}

}

Of course you can. 当然可以。 Laravel query builder implements everything you need. Laravel查询构建器实现您所需的一切。

See Laravel Docs: Query Builder , it have join methods , where clause methods and select methods . 请参阅Laravel文档:查询生成器 ,它具有连接方法where子句方法select方法

You can do for example the following: 例如,您可以执行以下操作:

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

That's just an example on how you can create queries. 这只是有关如何创建查询的示例。 Chain many methods that you need to create your query, the docs show many ways to do it, including with more complex joins if you need. 链接创建查询所需的许多方法,文档显示了执行查询的许多方法,包括在需要时进行的更复杂的联接。

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM