我想显示数据库中的最新订单状态名称,但是我在显示数据时遇到问题。这是我的代码:
OrderController
class OrderController extends Controller
{
public function index()
{
$orders = Order::with('shippingAddress', 'billingAddress', 'carrier', 'payment', 'status')->limit(300)->orderBy('id', 'DESC')->get();
}
}
OrderModel(已剪切)
public function status()
{
return $this->hasMany('App\Ss\Models\OrderHistory','id_order', 'id')
->orderBy('date_add', 'DESC')
->limit(1)
->with('statusLanguage');
}
OrderHistory模型
class OrderHistory extends Model
{
protected $table="order_history";
public $timestamps = false;
public function statusLanguage(){
return $this->hasOne('App\Ss\Models\StatusLanguage', 'id_status', 'id_status');
}
}
我如何显示:
{{ $order->status()->statusLanguage()->name ?? 'No status' }}
{{ $order->status()->statusLanguage->name ?? 'No status' }}
{{ $order->status->statusLanguage->name ?? 'No status' }}
每次结果均为错误,例如“此集合实例上不存在属性[statusLanguage]”。或类似。
当我尝试 dd($ order-> status)时,它显示与数据的返回关系,我需要什么:
那么哪里出了错?
答案 0 :(得分:1)
您正在尝试从OrderHistory实例的集合而不是单个实例中获取statusLanguage
。尝试$order->status[0]->statusLanguage->name
。
答案 1 :(得分:1)
您正试图将模型集合作为单个对象访问。
您可以在刀片文件中执行以下操作:
@foreach($order->status as $status)
{{ $status->statusLanguage->name ?? 'No status' }}
@endforeach
有关relationships with eloquent here的更多信息。