Laravel Eloquent ORM:使用belongs_to()的一对多问题


Laravel Eloquent ORM: trouble with one-to-many using belongs_to()

我在Laravel中访问关系有问题。与这个问题相关,我有两个表,messagesusers

messages表如下:

Messages: id, user_from, user_to, read, message, created_at, updated_at

users表如下:

Users: id, email, password, name, created_at, updated_at, bio, reputation, last_login_ip, last_seen, active

user_fromuser_to列都是int型,对应于发送消息的用户(主键)的id

Message模型的相关部分如下:

class Message extends Eloquent {
    //relationships
    public function user_from() {
        return $this->belongs_to('User', 'user_from');
    }
    public function user_to() {
        return $this->belongs_to('User', 'user_to');
    }
}

User模型的相关部分如下:

class User extends Eloquent {
    //relationships
    public function messages_from() {
        return $this->has_many('Message', 'user_from');
    }
    public function messages_to() {
        return $this->has_many('Message', 'user_to');
    }
}

在视图中,我试图访问写消息的用户,编写如下代码:

{{ $message->user_from->name }}

在这一行抛出错误Trying to get property of non-object。我知道$message对象是定义的,因为除了user_fromuser_to之外的所有其他属性都被定义并完美地打印出来。我已经通读了几遍文档,我不知道我在这里做错了什么…有人对别人有意见吗?这看起来像一个教科书上的例子,但它不起作用。

我将数据传递给视图的方式是:

$messages = Message::where('user_to', '=', Auth::user()->id)->take(20)->get();

使Message模型中的方法名称为from_user()to_user(),而不是user_from()user_to()(并更改视图以对应)完全解决了问题。没有更改其他代码。

Laravel通过方法名获取数据库字段,当你指定一个自定义字段时(我认为)。奇怪。