Tor*_*ike 10 php laravel eloquent laravel-4
我需要使用数据透视表的id作为另一个表中的外键.
例如,我有以下表格:
users: id, username, ...
places: id, placename, lat, lng, ...
place_user: id, user_id, place_id
routes: place_user_id, lat, lng, inserted_at.
Run Code Online (Sandbox Code Playgroud)
因此,当用户说我要去那个地方时,我在place_user表中有一个新条目,并开始记录他到达那里的路线.因此,对于每个place_user条目,我在路由表中有许多条目.
用雄辩的方式做出这种关系的正确方法是什么?我应该为数据透视表创建一个模型吗?
我试图通过以下解决方案解决我的问题,但没有运气:https://github.com/laravel/framework/issues/2093#issuecomment-39154456并在那里发表评论https://github.com/laravel/framework /问题/ 2093#issuecomment-58187802
任何建议将不胜感激.
Tor*_*ike 13
经过大量的搜索和尝试不同的解决方案,我想出了以下解决方案:
用户模型:
class User extends \Eloquent {
public function places() {
return $this->hasMany('PlaceUser')->with('Place');
}
}
Run Code Online (Sandbox Code Playgroud)
地方型号:
class Place extends \Eloquent {
public function users() {
return $this->hasMany('PlaceUser')->with('User');
}
}
Run Code Online (Sandbox Code Playgroud)
PlaceUser型号:
class PlaceUser extends \Eloquent {
public function user() {
return $this->belongsTo('User');
}
public function place() {
return $this->belongsTo('Place');
}
public function footprints() {
return $this->hasMany('Footprint');
}
}
Run Code Online (Sandbox Code Playgroud)
我已将名称路由更改为足迹以避免laravel中包含的路由类问题.
足迹模型:
class Footprint extends \Eloquent {
public function place_user()
{
return $this->belongsTo('PlaceUser');
}
}
Run Code Online (Sandbox Code Playgroud)
最后我得到了一个结构,我可以在其中进行不同的查询,例如:
// gets all places with corresponding pivot table entries and users table entries
Place::with('users')->get();
// get user with id=1 including corresponding pivot table entries and places table entries
User::with('places')->find(1);
// get footprint of the user
$user->places->get(0)->footprints
Run Code Online (Sandbox Code Playgroud)
希望这可以帮助
| 归档时间: |
|
| 查看次数: |
2970 次 |
| 最近记录: |