我不太擅长使用Laravel Eloquent进行查询。我有两张桌子
stories table
------------------------------------------------------------------
id | title | body | author_id |...
------------------------------------------------------------------
1 | Story 1 | Once a.. | 2
2 | Story 2 | There is | 4
3 | Something | You are. | 2
activities table
------------------------------------------------------------------
id | story_id | liker_id |...
------------------------------------------------------------------
1 | 2 | 2
在这里,author_id
和liker_id
实际上是user_id
。我想让特定用户创作和喜欢的故事,以在他的个人资料中显示这些故事。
我想使用雄辩的ORM。我使用查询生成器尝试了这样的事情
$stories = DB::table('stories')
->join('activities', function($join)
{
$join->on('stories.author_id', '=', 'activities.liker_id')
})
->where('stories.author_id', $author_id)
->get();
return $stories;
我可以通过join
获取特定liker_id
的story_id
,但无法使用单个查询中的story_id
从stories
表中获取详细信息。
这是使用查询构建器获取特定用户创作和喜欢的故事的简单方法
$author_id = 1;
$stories = DB::table('stories')
->join('activities', 'stories.author_id', '=', DB::raw('activities.liker_id AND stories.id = activities.story_id'))
->Where('stories.author_id', $author_id)
->get();
//select * from `stories` inner join `activities` on `stories`.`author_id` = activities.liker_id AND stories.id = activities.story_id where `stories`.`author_id` = 1"
使用雄辩,您可以执行以下操作创建2模型文件 1. 故事模型(故事.php( 2. 活动模型(活动.php( 故事.php
class Story extends Eloquent {
public function activities()
{
return $this->hasMany('Activity');
}
}
活动.php
class Activity extends Eloquent {
public function story()
{
return $this->belongsTo('Story');
}
}
而不是您可以在故事中编写函数以根据需要获取数据
$stories = Story::with('activities')
->where(DB::raw('stories.id = activities.story_id'))
->Where('stories.author_id', $author_id)
->get();
// haven't tested with eloquent but it should work