Warning: file_get_contents(/data/phpspider/zhask/data//catemap/1/php/253.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181

Warning: file_get_contents(/data/phpspider/zhask/data//catemap/8/mysql/58.json): failed to open stream: No such file or directory in /data/phpspider/zhask/libs/function.php on line 167

Warning: Invalid argument supplied for foreach() in /data/phpspider/zhask/libs/tag.function.php on line 1116

Notice: Undefined index: in /data/phpspider/zhask/libs/function.php on line 180

Warning: array_chunk() expects parameter 1 to be array, null given in /data/phpspider/zhask/libs/function.php on line 181
Php Laravel 4.2中的连接表雄辩_Php_Mysql_Laravel 4_Eloquent - Fatal编程技术网

Php Laravel 4.2中的连接表雄辩

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

我不太擅长用Laravel雄辩地提问。我有两张桌子

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
for
stories
liker\u id
in
Activities::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