0

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

订单控制器

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

订单历史模型

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)它显示返回的与我需要的数据的关系: 在此处输入图像描述

那么错误在哪里呢?

4

2 回答 2

1

您正在尝试statusLanguage从 OrderHistory 实例的集合而不是从单个实例中获取。试试$order->status[0]->statusLanguage->name

于 2019-02-25T12:07:38.670 回答
1

您正在尝试将模型集合作为单个对象访问。

您可以在刀片文件中执行以下操作:

@foreach($order->status as $status)
    {{ $status->statusLanguage->name ?? 'No status' }}
@endforeach

有关与 eloquent 的关系的更多信息,请点击此处。

于 2019-02-25T12:23:07.487 回答