【问题标题】:Joining Tables in Laravel 4.2 Eloquent在 Laravel 4.2 Eloquent 中连接表
【发布时间】:2023-04-03 06:53:01
【问题描述】:

我不太擅长使用 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。我想让特定用户创作和喜欢的故事在他的个人资料中显示这些故事。

我想使用 Eloquent 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 表中获取详细信息。

【问题讨论】:

  • 也许你可以为每个表创建一个模型,并可以做这样的事情 $all = Activities::with('stories')->get()
  • @lajosArpad 如何在Activities::with('stories')->get() 中为stories 和liker_id 实现where author_id?
  • 我不是 laravel 用户,但多年来我一直在使用 ORM。您应该可以定义连接路径。例如,您可能有一个连接表 activity_stories,其中包含活动和故事的外键。如果是这种情况,您可以加载带有活动和故事的 activity_stories。
  • 看来你需要Eloquent Relationships
  • @lajosArpad 你的意思是我需要另一个包含stories 和activities 数据的表,然后对该表进行查询,对吧?

标签: php mysql laravel-4 eloquent


【解决方案1】:

这是使用查询生成器获取特定用户创作和喜欢的故事的简单方法

$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) 故事.php

class Story extends Eloquent {

    public function activities()
    {
        return $this->hasMany('Activity');
    }

}

Activity.php

class Activity extends Eloquent {

    public function story()
    {
        return $this->belongsTo('Story');
    }

}

您可以在 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

【讨论】:

    猜你喜欢
    • 2019-12-06
    • 1970-01-01
    • 2023-03-12
    • 1970-01-01
    • 2019-09-06
    • 2018-08-07
    • 2021-01-05
    • 2016-07-22
    • 2018-11-06
    相关资源
    最近更新 更多