laravel 5.7中如何获取双重关系值?订购>历史> statur lang

时间:2019-02-25 11:59:35

标签: laravel eloquent eloquent--relationship

我想显示数据库中的最新订单状态名称,但是我在显示数据时遇到问题。这是我的代码:

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)时,它显示与数据的返回关系,我需要什么: enter image description here

那么哪里出了错?

2 个答案:

答案 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的更多信息。