这是我第一次使用ORM,所以我想知道是否可以将它映射到其他表...
例如我目前已登录用户。它通过链接表连接到POSTS
表。例如,如果我想选择帖子我做这样的SQL:
SELECT
`posts`.`id`', `posts`.`Name`, `posts`.`Description`
FROM
`links`,
`posts`
WHERE
`links`.`user_id` = 1 AND `links`.`post_id` = `posts`.`id`
如何扩展Eloquent如果我请求Posts::all()
它将只返回当前用户的帖子...
答案 0 :(得分:2)
您的帖子有点令人困惑,但我希望我的回答可以按照您的预期解决。
有关详情,请参阅Laravel(多对多)Relationship documentation。
为了简单起见并遵守 Laravel惯例,我强烈建议您使用post_user
代替link
作为数据透视表 (post_user
表格应以user_id
和post_id
作为列。)
您不必定义相应的枢轴模型(这是惯例)。
以下模型旨在尊重表格users
和posts
。
(已经存在,只需添加关系定义)
class User extends Eloquent {
...
public function posts()
{
return $this->belongsToMany('Post');
}
...
}
(当然要创建)。
...
class Post extends Eloquent {
public function users()
{
return $this->belongsToMany('User');
}
}
...
通常,您在Laravel中执行以下操作以获取当前登录的用户:
$user = Auth::user(); // a User model / record
假设$ user的类型为User(Model),您可以使用以下命令检索其所有帖子:
$user->posts(); // a Collection
答案 1 :(得分:2)
您可以在POST
模式中定义query scope
public function scopeOfUser($query,$user_id)
{
return $query->join('links', 'links.post_id', '=', 'posts.id')
->where('links.user_id', '=', $user_id)
->select('posts.id', 'posts.Name', 'posts.Description');
}
然后像这样使用它:
$posts = POST::OfUser(1)->get();