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 雄辩的方式从表中查找单行的主要内容,如果未能解决你的问题,请参考以下文章