在所有模型laravel中显示相关的表列

时间:2016-10-30 09:49:59

标签: laravel eloquent foreign-key-relationship

我希望在所有模型(用户)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);
    }
}

4 个答案:

答案 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',
];