【问题标题】:Laravel Eloquent Inaccessible by $model->id;Laravel Eloquent 无法被 $model->id 访问;
【发布时间】:2015-01-05 20:11:22
【问题描述】:

我以前做过很多次,但不知怎的,我的思绪一直停留在这个上:

$data['conversations'] = Conversation::with("sender")->received()->get();

执行{{ $conversation }} 会产生:

{
    "id": "1",
    "subject": "",
    "sender": {
        "id": "4",
        "email": "jane@doe.com",
        "name": "Jane Poe",
        "group_id": "3",
        "created_at": "2014-12-22 20:31:00",
        "updated_at": "2014-12-22 20:31:00"
    },
    "receiver": "1",
    "created_at": "2015-01-04 00:00:00",
    "updated_at": "2015-01-04 00:00:00"
}

注意“发件人?现在{{ $conversation->sender->email }} 给出:

试图获取非对象的属性

当调用{{ $conversation->sender }} 时,它只打印“4”(id)。

sender 存储在 conversation 表中名为 sender 的列中。

$conversation->sender() 也不起作用

这是代码:

class Conversation extends Eloquent {

    protected $table = 'conversations';

    public function sender()
    {
        return $this->belongsTo('User','sender','id');
    }

    public function receiver()
    {
        return $this->belongsTo('User','receiver','id');
    }

}

【问题讨论】:

    标签: php mysql oop laravel eloquent


    【解决方案1】:

    关系不能与外键同名(或基本上任何列)

    只需将sender 更改为sender_id。然后你甚至可以从关系声明中删除它,因为它是常规命名。

    public function sender()
    {
        return $this->belongsTo('User');
    }
    

    (因为id 可能是User 的主键,你也可以删除它)

    【讨论】:

      猜你喜欢
      • 2017-02-17
      • 2019-08-11
      • 1970-01-01
      • 2013-11-20
      • 1970-01-01
      • 1970-01-01
      • 1970-01-01
      • 2019-08-26
      • 1970-01-01
      相关资源
      最近更新 更多