【发布时间】:2020-02-27 20:27:13
【问题描述】:
在我的项目中,我有一个客户订单列表。每个订单都有 id_carrier 字段来查找承运人名称(如 dhl、ups 等)。问题是我需要使用模型运营商的函数 getName() 选择运营商名称。
所以我的查询看起来像:
public function loadOrders()
{
$orders = Order::select('id', 'reference', 'created_at','total_value')->with(['carrier' => function($carrier){
$carrier->getName();
}])->paginate(20);
return $orders;
}
错误信息:
message: "Call to undefined method Illuminate\Database\Eloquent\Relations\HasOne::getName()"
型号顺序:
public function carrier()
{
return $this->hasOne('App\SupremeShop\Models\Carrier', 'id', 'id_carrier');
}
模型载体
public function getName()
{
return $this->translation->where('id_lang', 1)->first()->name;
}
所以我的查询返回了 ajax 的结果,它被数据表使用。所以我通过 json 作为完成结果。选择经典数据库字段没有问题 - 只有当我需要使用关系来获取运营商名称时才会出现问题。
如果我执行查询订单列表之类的操作并调用 $order->carrier->getName() 我将毫无问题地获得运营商名称。但在我的查询中,我在 20 个分页结果的上下文中使用 getName(),我不确定如何创建正确的 sql 查询。
每个订单都有一个承运人。每个运营商都有多个翻译。 GetName 函数返回默认翻译。
【问题讨论】: