laravel 雄辩的方式从表中查找单行

Posted

技术标签:

【中文标题】laravel 雄辩的方式从表中查找单行【英文标题】:laravel elequent way to find single row from table 【发布时间】:2020-07-07 04:29:40 【问题描述】:

你好,我是 laravel 的新手,也许我对 eloquent 和 query builder 编写查询的方式有点困惑,但无论如何,你能告诉我在 laravel 6 或 7 中检索此类信息的最佳雄辩方式是什么

用户 > hasMany > 食谱 配方 > 属于 > 用户

我想检查用户 id 2 是否存在于 users 表中,然后只得到一个 id 为 3 的帖子

【问题讨论】:

您的尝试和遇到的问题请分享 您在此处仅定义了用户和食谱关系。那帖子呢?分享您的数据库架构或模型关系,以便其他人可以更好地帮助您。 【参考方案1】:

Query builder 用于显式构建 SQL 查询,并且不返回模型的实例。 Eloquent 查询生成器,类似,但结果将包含加载了所有属性的模型,并且有一些方便的函数用于查询您在模型中定义的关系。

鉴于您帖子中的信息有限,我假设您所说的帖子是指食谱:

查询生成器:

DB::table('users')
  ->join('recipes', 'recipes.user_id', '=', 'users.id')
  ->select(['users.some_col', ... 'recipes.some_col'])
  ->where('users.id', 2)
  ->get();

如果您的模型设置了关系。你可以像这样使用 Eloquent:

User::where('id', 2)->with('recipes')->get();

【讨论】:

【参考方案2】:

如果我理解正确的话会是这样的:

User::whereId($userId) //asuming it is 2
    ->with(['recipes' => function($q) use($recipeId) 
        $q->where('id', $recipeId); //assuming it is 3
    ])->first();

【讨论】:

您好先生,谢谢您的帮助,我可以再问一件事 1> User::whereId($userId) //假设它是 2 ->with(['recipes' => function($q) use($recipeId) $q->where('id', $recipeId); //假设是 3 ])->first();和 2> User::findOrFail(1)->recipes()->where('id','=','2')->get() 除了第一个将提供用户和配方数据以及其他唯一配方数据,在所见背后创建的查询之间有什么区别吗?【参考方案3】:

如果我理解正确,你可以这样做:

$user = User::findOrFail(2); //auto 404 if user not found
$recipe = $user->Recipes()->where('id',3)->first();

【讨论】:

【参考方案4】:

您可以使用条件预加载以获得更好的性能。

$userId = 2;
$receiptId = 3;
$user = User::with(['receipts'=> function ($query) use($receiptId)
       $query->where('id', $receiptId);
 
])->find($userId)

【讨论】:

以上是关于laravel 雄辩的方式从表中查找单行的主要内容,如果未能解决你的问题,请参考以下文章

如何在雄辩的 Laravel 中使用名称查找条目?

Laravel 雄辩的查询与条件下另一个表中的值的总和

在 Laravel 中迁移外键与雄辩的关系

Laravel 5.4雄辩的一对多关系

Laravel 5 雄辩的基于连接的字段最大值

Laravel 和雄辩的返回结果来自多对多关系