Laravel 如何显示两个相关雄辩模型中的参数?

Laravel 如何显示两个相关雄辩模型中的参数?,laravel,eloquent,Laravel,Eloquent,我有两个相关的雄辩表模型: #app/Order.php 受保护的$fillable=[ “id”、“状态”、“客户电子邮件”、“合作伙伴id”, ]; 公共职能伙伴() { 返回$this->belongsTo('App\Partner'); } #app/Partner.php 受保护的$fillable=['id','email','name']; 公共职能令() { 返回$this->hasOne('App\Order'); } 然后,如果我尝试将$partner添加到我的订单资源中

我有两个相关的雄辩表模型:

#app/Order.php
受保护的$fillable=[
“id”、“状态”、“客户电子邮件”、“合作伙伴id”,
];
公共职能伙伴()
{
返回$this->belongsTo('App\Partner');
}
#app/Partner.php
受保护的$fillable=['id','email','name'];
公共职能令()
{
返回$this->hasOne('App\Order');
}
然后,如果我尝试将
$partner
添加到我的
订单
资源中的数组,我会得到一个服务器错误:

# app/Http/Resources/Order.php

public function toArray($request)
{
   // $partner = Order::find(1)->partner;

    return parent::toArray($request);

    return [
      'id' => $this->id,
      'status' => $this->status,
      'client_email' => $this->client_email,
      'partner_id' => $this->partner->id,
      'partner_name' => $this->partner->name,
     ];
}
创建了额外的,但我不知道我是否需要它 app/Http/Resources/Partner.php

<?php

namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;

class Partner extends JsonResource
{
    public function toArray($request)
    {
        return parent::toArray($request);

        return [
          'id' => $this->id,
          'name' => $this->name,
       ];
    }
}
表3列:

id, email, name
id, status, client_email, partner_id
表顺序列:

id, email, name
id, status, client_email, partner_id
将“partner_name”传递给Resources/Order array.php是正确的还是需要在控制器中完成


请向我演示如何正确执行此操作,使用资源中模型的关系访问
合作伙伴
属性:

<?php

namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;

class Order extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id'           => $this->id,
            'status'       => $this->status,
            'client_email' => $this->client_email,
            'partner_id'   => $this->partner_id,
            'partner_name' => $this->partner->name,   // <---
        ];

    }
}
返回[
'id'=>this->id,
“状态”=>$this->status,
“客户电子邮件”=>this->client\u email,

‘partner_id’=>this->partner->id,//$this->partner->name,///看来你们的关系有点不对劲了

订单
模型中的
$filleble
值中,我可以看到
合作伙伴id
,因此-如果我错了,请更正我,但-这是外键..使此模型成为子模型

尝试更新您的关系,如下所示:

# Order.php

public function partner()
{
    return $this->belongsTo('App\Partner');
}   //            ^^^^^^^^^
以及:

因此,现在您可以在
资源中使您的关系像这样工作:

<?php

namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;

class Order extends JsonResource
{
    public function toArray($request)
    {
        return [
            'id'           => $this->id,
            'status'       => $this->status,
            'client_email' => $this->client_email,
            'partner_id'   => $this->partner_id,
            'partner_name' => $this->partner->name,   // <---
        ];

    }
}

尝试在hasone方法上添加此列,返回$this->hasone('App\Passport','username','username');如果我取消注释“$partner=Order::find(1)->partner;”-错误。如果我只将两行更改为您的,则没有任何更改我编辑了响应。似乎您在调用
资源时没有传递相关模型。关系很好。
合作伙伴id
位于
订单
模型上,因此自然
属于
(显然,我不允许说“+1”)@Kenny您所有的编辑都不会返回错误,但是
partner\u name
也不会返回错误。其他数据是displayed@algebra你能用你当前的代码和表结构更新你的帖子吗?这里缺少一些东西。这应该可以正常工作。@Kenny我按照你的要求更新了我的帖子。请看一看look@algebra我已经修好了您文章的格式。现在,如tt所示,我可以在您的
OrderResource
中看到两个return语句。第一个语句返回刚刚铸造为数组的
$order
(因此,
partner\u name
不会被返回)。删除
return parent::toArray($request);
并再次检查现在是否返回预期的属性。