[英]Eloquent ORM relationship on laravel 5
我在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}}时,我收到一条错误消息,我试图获取非对象的属性
这是此页面的控制器
当您使用时,默认用户的关键字段: 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()
。
看来你没有为消息模型设置外键。 如果一个用户有很多消息,你应该添加这样的外键
public function up()
{
Schema::create('messages', function(Blueprint $table){
$table->increments('id');
$table->integer('user_id')->unsigned();
$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');
});
}
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.