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);
并再次检查现在是否返回预期的属性。