我希望在所有模型(用户)laravel选择中显示相关的表列(customers.name
)。
我使用accessor laravel。
用户表:
id name customer_id
1 hassan 1
客户表:
id name
1 customer1
现在使用
$user = Auth::user();
return $user;
我想要表演:
id: 1,
name: "hassan",
customer_id: {
id: 1,
name: "customer1"
}
但显示此错误:
调用App \ User :: jsonSerialize()
失败class User extends Authenticatable
{
use EntrustUserTrait;
/**
* Get the user's customer name.
*
* @param string $value
* @return array
*/
public function getCustomerIdAttribute($value)
{
return [
'id' => $value,
'name' => $this->customer->name
];
}
/**
* The attributes that should be casted to native types.
*
* @var array
*/
protected $casts = [
'customer_id' => 'array',
];
/**
* Get the customer record associated with the user.
*/
public function customer()
{
return $this->belongsTo(Customer::class);
}
}
答案 0 :(得分:0)
因此,您希望根据用户的customer_id从users表中获取客户名称。
在User.php模型中
public function customer(){
return $this->hasOne(Customer::class,'id','customer_id');
}
然后,
$user = Auth::user();
$user->customer;
答案 1 :(得分:0)
似乎这是一个已知问题(https://github.com/FrozenNode/Laravel-Administrator/issues/879)。
我建议,在获得你的:: all()结果后,你循环遍历它并调用$ user-> customer。
foreach($result as $user) $user->customer;
答案 2 :(得分:0)
您应该删除$ casts属性。整数无法直接从数据库转换为数组,因为从数据库中选择属性时会立即使用casts属性。
此外,不需要getCustomerIdAttribute方法,因为客户将自动转换为名为' customer'的虚拟属性。
简而言之:仅仅定义客户关系就足够了。它应该返回请求的输出,除了它被称为“客户'而不是' customer_id'。
答案 3 :(得分:0)
我找到答案。
public function getCustomerNameAttribute()
{
return $this->attributes['customer_name'] = ($this->customer ? $this->customer->name : null);
}
/**
* The accessors to append to the model's array form.
*
* @var array
*/
protected $appends = [
'customer_name',
];