当前位置: 首页 > 面试题库 >

Laravel加入3桌

狄高畅
2023-03-14
问题内容

我正在构建类似Twitter的应用程序。有一个供稿,我只想在其中显示我关注的用户的帖子。

我尝试了所有使用join的操作,但是似乎没有任何效果。

我有3个表:UsersFollowersShares

表格如下所示:

用户数id

关注user_idfollower_id

股份user_id

我需要得到的是“所有共享,其中share.user_id = followers.follower_id”“ ANDWHERE
followers.user_id = users.id”

假设users.id为3,我尝试了以下操作:

$shares = DB::table('shares')
        ->leftjoin('followers', 'shares.user_id', '=', 'followers.follower_id')
        ->leftjoin('users', 'followers.user_id', '=', 'users.id')
        ->where('users.id', 3)
        ->where('shares.user_id', 'followers.follower_id')
        ->get();

但它不起作用。

任何帮助表示赞赏:)


问题答案:

我相信您的加入是错误的:

$shares = DB::table('shares')
    ->join('users', 'users.id', '=', 'shares.user_id')
    ->join('followers', 'followers.user_id', '=', 'users.id')
    ->where('followers.follower_id', '=', 3)
    ->get();

我也建议你为命名表follows代替,感觉比较自然一点说user has many followers through followsuser has many followees through follows

$shares = DB::table('shares')
    ->join('users', 'users.id', '=', 'shares.user_id')
    ->join('follows', 'follows.user_id', '=', 'users.id')
    ->where('follows.follower_id', '=', 3)
    ->get();

模型html" target="_blank">方法

我没有意识到您正在使用DB::查询而不是模型。因此,我正在解决问题并提供更多的清晰度。我建议您使用模型,对于那些从框架(尤其是SQL)开始的人来说,它要容易得多。

型号示例:

class User extends Model {
    public function shares() {
        return $this->hasMany('Share');
    }
    public function followers() {
        return $this->belongsToMany('User', 'follows', 'user_id', 'follower_id');
    }
    public function followees() {
        return $this->belongsToMany('User', 'follows', 'follower_id', 'user_id');
    }
}
class Share extends Model {
    public function user() {
        return $this->belongsTo('User');
    }
}

模型用法示例:

$my = User::find('my_id');

// Retrieves all shares by users that I follow
// eager loading the "owner" of the share
$shares = Share::with('user')
    ->join('follows', 'follows.user_id', '=', 'shares.user_id')
    ->where('follows.follower_id', '=', $my->id)
    ->get('shares.*'); // Notice the shares.* here

// prints the username of the person who shared something
foreach ($shares as $share) {
    echo $share->user->username;
}

// Retrieves all users I'm following
$my->followees;

// Retrieves all users that follows me
$my->followers;


 类似资料:
  • 请帮帮我,对于连接,学习SQL和连接是痛苦的:( 我有表:类别,列名称:name,ID 我有列名称为ID的table:sub_类别 我有列名称为category\u id的表:provider\u services 当我在laravel视图中执行此操作时,刀片

  • 我有3个表格:我的Laravel 5项目的产出、产品和服务。 我想基于此条件在一个查询中连接这3个表: 如果(p=产品)获取products.name 如果(s=服务)获取服务。名称

  • 我有以下三种型号: 类别字段: 分类选项: 当我运行这个查询时,我得到了这个错误: SQLSTATE[42S22]:列未找到: 1054未知列'field ID'在'where子句'(SQL:选择*从其中=3)任何帮助请知道是什么问题!!?

  • 因此,我计划使用Jupyter笔记本(Python 3)进行一些数据分析,出于协作的原因,我想将数据存储在github存储库中,但是数据集是敏感的。 因此,我希望将数据(当前为.csv)作为加密文件存储在repo上,然后在运行时对其进行解密(我猜是使用密码提示)。 最好的方法是什么?

  • 问题内容: 我已经能够使用以下原始sql获取查询结果: 但是我还不能使它雄辩地工作。 根据一些类似的答案,我曾尝试在或中执行功能,但尚未过滤每个人的操作。就目前而言: 我至少在标题 大致 正确的方向,正确的…? 如果相关,则该模型具有两个关系: 问题答案: 因此,作为参考,我像这样解决了它: 奇怪的是,其中的子句需要语音标记才能使变量正确通过sql查询(同样,“ 2”似乎不起作用,而“ 2”却可以

  • 我是Laravel5.2的新手,正在开发一个遗留系统,对雄辩有点困惑,希望有人能给我代码。 共有3个表格: 卡片类别卡片2类 卡片可以是许多类别的一部分,这些类别保存在cards2cat表中。 cards2cat表的结构如下 id(主键)图像(卡)类别 我想做的是在Cards模型中有一个方法,名为getCardsWithCategors,它返回Cards信息和category表中类别的名称。 ca