Php Laravel 4.2中的连接表雄辩
我不太擅长用Laravel雄辩地提问。我有两张桌子Php Laravel 4.2中的连接表雄辩,php,mysql,laravel-4,eloquent,Php,Mysql,Laravel 4,Eloquent,我不太擅长用Laravel雄辩地提问。我有两张桌子 stories table ------------------------------------------------------------------ id | title | body | author_id |... ------------------------------------------------------------------ 1 | Story 1 | Once a.. | 2
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\u id
和liker\u id
实际上是user\u 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\u id
获取story\u id
,但无法在单个查询中使用story\u 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"
使用Eloquent,您可以执行以下操作创建2个模型文件
1.故事模型(Story.php)
2.活动模型(Activity.php)
Story.php
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
也许您可以为每个表创建一个模型,并可以这样做:$all=Activities::with('stories')->get()@lajosArpad我如何实现
where
author\u id
forstories
和liker\u id
inActivities::with('stories')->get()
?我不是laravel用户,但是我已经和ORMs合作多年了。您应该可以定义连接路径。例如,您可能有一个连接表activity\u stories,其中包含活动和故事的外键。如果是这种情况,您可以用活动和故事加载活动\故事。看起来您需要@lajosArpad您的意思是我需要另一个包含故事
&活动
数据的表,然后对该表进行查询,对吗?
$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