将原始SQL查询转换为Laravel雄辩的左外部联接

时间:2019-09-25 11:13:34

标签: mysql laravel eloquent

有人可以帮助我将查询转为口才吗?

模型订单:: 型号任务卡::

select 
    ifnull(data, o.created_at) as dataZlecenia,o.id, o.nazwa
from  
    orders o
left outer join
    (select max(created_at) as data,order_id from task_cards
group by order_id) as a 
on a.order_id=o.id
order by dataZlecenia desc

1 个答案:

答案 0 :(得分:0)

似乎您的命名空间也有误,请尝试使用App\ModelName而不是App\Models\ModelName。并使用英语来命名功能/类:)

检查您的外键是否正确使用。如果您希望它开箱即用,orders表应将client_id作为外键,将id作为主键,而clients表必须具有主键id。然后此解决方案将起作用:

public function order(){
    return $this->hasOne('App\Order');
}

通过https://laravel.com/docs/5.8/eloquent-relationships

编辑: 为了更好地理解:)在create_orders_table迁移中:

$table->bigIncrements('id');
$table->unsignedBigInteger('client_id');
$table->foreign('client_id')->references('id')->on('clients')->onDelete('cascade');

此外,我看不出您的客户只能下单的原因。我将在Client模型中使用:

public function orders(){
    return $this->hasMany('App\Order');
}

Order模型中:

public function client(){
   return $this->belongsTo('App\Client');
}

这样,您的客户将能够拥有多个订单,而一个订单将只有一个分配的客户。