假设我有以下数据库架构:
dogs
和owners
与经典belongsToMany
相关联。 walks
表怎么样?我希望能够在这种关系中使用雄辩的好东西:
$dogs = Dog::with('walks')->get();
$walks = Walk::with('dogs')->get();
理论上,我可以将dog_owner_id
替换为两个单独的列:dog_id
和owner_id
。这样可以很容易地使用Eloquent,但是我会失去一些数据完整性,因为无关的狗和所有者可能会散步(而且这两者都不安全!)。
在 Walk.php 中,如何定义关系?
public function dog() {
// return ???;
}
Dog.php 和 Owner.php 怎么样?
public function walks() {
// return ???;
}
答案 0 :(得分:0)
正如其他人所提到的,你可以使用HasManyThrough:
https://laravel.com/docs/5.5/eloquent-relationships#has-many-through
就像你说的那样,这对你的狗和主人模特都有效。对于Walk模型,它有点不同,但您可以自己映射查询:
return $this->hasManyThrough(
'App\Post',
'App\User',
'country_id', // Foreign key on users table...
'user_id', // Foreign key on posts table...
'id', // Local key on countries table...
'id' // Local key on users table...
);
答案 1 :(得分:0)
1-创建4个模型(步行,狗,所有者,狗所有者)
2-在Walk.php模型中
public function dog()
{
return $this->hasOneThrough(
'App\Models\Dog',
'App\Models\DogOwner',
'id', // Local key on dog_owner table...
'id', // Local key on dogs table...
'dog_owner_id', // Foreign key on walks table...
'dog_id' // Foreign key on dog_owner table...
);
}
public function owner()
{
return $this->hasOneThrough(
'App\Models\Owner',
'App\Models\DogOwner',
'id', // Local key on dog_owner table...
'id', // Local key on owners table...
'dog_owner_id', // Foreign key on walks table...
'owner_id' // Foreign key on dog_owner table...
);
}
3-在Dog.php模型中
public function walks()
{
return $this->hasManyThrough(
'App\Models\Walk',
'App\Models\DogOwner',
'dog_id', // Foreign key on dog_owner table...
'dog_owner_id', // Foreign key on walks table...
'id', // Local key on dogs table...
'id' // Local key on dog_owner table...
);
}
4-在Owner.php模型中
public function walks()
{
return $this->hasManyThrough(
'App\Models\Walk',
'App\Models\DogOwner',
'owner_id', // Foreign key on dog_owner table...
'dog_owner_id', // Foreign key on walks table...
'id', // Local key on owners table...
'id' // Local key on dog_owner table...
);
}