【问题标题】:Wrapper for belongsTo returns nullbelongsTo 的包装器返回 null
【发布时间】:2021-05-29 19:01:08
【问题描述】:

2 个表 - client 和 client_status 表client

id
client_status_id
name

此表包含 1 条记录,其中填写了 client_status_id 和名称。

client_status

id
name

这个表也不为空

这些表的模型:

class Client extends Model {
    public function status() {
        return $this->belongsTo(ClientStatus::class);
    }
}

class ClientStatus extends Model {
    protected $table = 'client_status';

    public function clients() {
        return $this->hasMany(Client::class);
    }
}

当我在 ClientController 中的某处分配 $client 时:

  • $client->name 包含真实客户名称
  • $client->status == null,所以,我无法获得$client->status->name(客户状态名称)。为什么以及如何改变?

【问题讨论】:

    标签: laravel eloquent relationship


    【解决方案1】:

    关系错误,用户必须有状态,状态属于用户。

    在我看来,我更愿意将用户 ID 保存在状态表中。而且会很简单。

    【讨论】:

    • 从理论上讲你错了——一个客户状态可以有很多客户。例如,“Active client”状态可以有 10+ 个客户端(hasMany),从客户端来看:一个客户端可以只有一个状态(belongsTo)。与文档的 Eloquent 章节中描述的相同
    • 对不起,我错过了开始理解这个想法,我以为每个用户都有他的一个状态。尝试这样做: return $this->belongsTo('App\ClientStatus','client_status_id','id');
    • 最后的想法很棒 - 一切正常!谢谢,艾哈迈德
    猜你喜欢
    • 2011-12-01
    • 1970-01-01
    • 2020-05-16
    • 2016-03-31
    • 1970-01-01
    • 2020-12-22
    • 1970-01-01
    • 2016-02-29
    • 1970-01-01
    相关资源
    最近更新 更多