php - laravel 5 上 Eloquent ORM 关系

标签 php laravel laravel-5 eloquent

我在 laravel 5 上创建了消息系统,但我无法在恢复页面上获取发件人信息(例如姓名电子邮件......)

我有消息表:

public function up()
    {
        Schema::create('messages', function(Blueprint $table){
            $table->increments('id');
            $table->integer('destination_id')->unsigned();
            $table->integer('source_id')->unsigned();
            $table->string('sujet');
            $table->text('contenu');
            $table->boolean('vu')->default(0);
            $table->boolean('repondu')->default(0);
            $table->timestamps();
            $table->foreign('source_id')->references('id')->on('users')->onDelete('cascade');
            $table->foreign('destination_id')->references('id')->on('users')->onDelete('cascade');
        });
    }

在我创建的模型上添加:

消息模型:

class Message extends Model {

    public function user()
    {
        return $this->belongsTo('App\User');
    }
}

在用户模型上我添加了这个函数:

public function message()
{
    return $this->hasMany('App\Message');
}

但是当我尝试获取用户消息并想要获取例如 {{$message->user->name}} 时,我收到一条错误消息,提示我尝试获取非对象的属性

这是这个页面的 Controller

最佳答案

当您使用时,默认用户的关键字段:return $this->belongsTo('App\User'); 如果表名如下:table_name_id在此示例中将类似于:user_id

我看到您需要与以下用户表的关系:

$table->integer('destination_id')->unsigned();
$table->integer('source_id')->unsigned();

所以最好的解决方案是创建两个方法,例如:

class Message extends Model 
{
    public function source()
    {
        return $this->belongsTo('App\User', 'source_id');
    }

    public function destination()
    {
        return $this->belongsTo('App\User', 'destination_id');
    }
}

然后你可以调用:

{{$message->source->name}}

{{$message->destination->name}}

当然,您可以用其他方式命名此方法,例如:sourceUser()

关于php - laravel 5 上 Eloquent ORM 关系,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/36981044/

相关文章:

php - Zend DB/Adapter/Query() 如何运行通配符搜索

php - PHP可以将html命令写入另一个文件吗?

php - 如何使用命名空间获取属性的值

php - 为什么中间件不实现接口(interface)?

PHP : edit issued invoice

PHP:类中的特征与其他特征冲突

php - 使用 Laravel 在其他表中显示产品名称

mysql - 在 Laravel 中删除外键

mysql - Laravel 5 插入带有外键错误的行

Laravel错误: Unable to prepare route [login] for serialization