belongsTo不按要求返回结果

时间:2017-06-15 17:36:50

标签: laravel-5

我希望user能够只有一个distrito(葡萄牙语中的district)。 distrito可以有多个user。这是一个相当简单的关系但问题出现在你有第三个名为distritos的表时,唯一的工作就是将数字翻译成字符串(我不知道这样的名字)表)。

Distrito table

$table->increments('id');
$table->string('distrito');

e.g。

ID  DISTRITO
1 - Aveiro
2 - Beja
3 - ...

用户表

$table->string('name');
$table->string('last_name');
$table->string('profile_picture')->default('default.jpg');
$table->string('userProfile')->default('');
$table->float('stars')->default(0);

distrito_user表 this table will reference where the user live

$table->integer('user_id'); //id of the user
$table->integer('distrito_id');  //Id of the district where the user lives

用户模型

public function distritoUtilizador(){
    return $this->belongsTo(DistritoUser::class);
}

DistritoUser的模型

protected $table = 'distrito_user';

调用雄辩的模型

$user = Auth::user();
dd($user->distritoUtilizador);

返回null

第一个问题:这是解决问题的正确方法(用户住在某个地方,我需要填写该位置)?

如果这是解决问题的正确方法:为什么它没有返回所需的结果?

1 个答案:

答案 0 :(得分:1)

对于简单的一对多,只需将外键存储到用户模型上,不需要中间表。

$table->increments('id')->unsigned();
$table->string('name');
$table->string('last_name');
$table->string('profile_picture')->default('default.jpg');
$table->string('userProfile')->default('');
$table->float('stars')->default(0);
$table->integer('distrito_id')->unsigned();
$table->foreign('distrito_id')->references('id')->on('distrito');

并完全摆脱distrito_user表。现在使用有这种方法:

public function distrito(){
    return $this->belongsTo(Distrito::class, 'id');
}

而distrito有:

public function users(){
    return $this->hasMany(User::class);
}

还将部署迁移更改为:

$table->increments('id')->unsigned();