【问题标题】:Laravel eloquent return both where conditionsLaravel 雄辩地返回两个条件
【发布时间】:2017-06-26 09:17:40
【问题描述】:

您好,我有一个表 ideas,我想返回 user_id = 和经过身份验证的用户 ID 的行加上 category_id = 的行,假设是数组 [1, 2, 3]

免责声明:我希望退回这两个条件!

【问题讨论】:

  • 欢迎来到 Stackoverflow。你的问题根本不清楚。请查看stackoverflow.com/help/how-to-ask - 我们在这里帮助您解决特定的编程问题,而不是为您编写代码。因此,请向我们展示您迄今为止所做的尝试,与我们分享您的想法,我们会为您提供帮助。但是没有人会为你写代码。
  • 我没有请人为我编写代码,也许问题不清楚,我只是想为特定部分提供帮助,谢谢您的时间!
  • 正如我所说,您应该编辑您的问题。我不认为它会得到答复。
  • 我无法理解您想问或说的内容。最好的猜测是,查看用户和类别的关系。
  • 您是说您只想要经过身份验证的用户的 category_id 在 [1,2,3] 中的行还是经过身份验证的用户或 category_ids 的行

标签: php mysql laravel


【解决方案1】:

好像是这样的: 我认为您的表ideas 和与之关联的模型Idea 具有下一个结构: id、user_id、category_id 和其他一些字段...

要获得经过身份验证的用户,您可以执行 Auth::user(); 所以,你可以这样做:

$categoryIds = [1, 2, 3];
$authUserId = Auth::user()->id;

$ideas = Idea::where('user_id', $authUserId)->whereIn('category_id', $categoryIds)->get();

如果您需要使用查询提取关系,您可以添加with 语句:

$ideas = Idea::with('categories')->where('user_id', $authUserId)->whereIn('category_id', $categoryIds)->get();

ofc,您需要在模型中设置属性

您还可以在用户模型中设置关系并获取与用户关联的记录:

User.php

public function ideas() {
    return $this->hasMany('App\Idea');
}

somewhere in code:

$categoryIds = [1, 2, 3];
Auth()->user()->ideas()->whereIn('category_id', $categoryIds)->get();

更新: 要进行某种形式的加入,您可以使用:

$userIdeas = Idea::where('user_id', Auth::user()->id)->get();
$categoryIds = [1, 2, 3];
$categoryIdeas = Idea::where('user_id', '<>', Auth::user()->id)->whereId('category_id', $categoryIds)->get();
$mergedIdeas = $userIdeas->merge($categoryIdeas);

最后。在一个查询中完成:

$userId = Auth::user()->id;
$categoryIds = [1, 2, 3];
$ideas = Idea::where('user_id', $userId)->orWhere(function($query) use ($categoryIds) {
    $query->where('user_id', '<>', $userId)->whereIn('category_id', $categoryIds);
})->get();

【讨论】:

  • 是的,我的表就是这样,但我已经有了这个查询,问题是这个查询只返回类别前。 1, 2, 3 其中用户 = 经过身份验证的用户我想返回属于身份验证用户的所有行 + 属于第 1 类示例的行
  • 第 1 类示例中的含义是什么?使用 where('category_id', 1) 啊似乎我明白了。去使用收藏。我会更新我的答案
  • 所以为了简单起见,我想要用户创建的所有行我不关心类别,但因为我有一个数据透视表,它是 categories_user 并且用户属于我想要返回的类别并且他的所有行加上属于类别但不是从他创建的行
  • 你可以这样加入 ->with('user', 'category')
  • 如果你只使用一个 id 你可以简单 ->where('category_id', $categoryId) (例如,$categoryId == 1 (not array))
【解决方案2】:

我知道你想要什么有点问题,但是

如果您想要经过身份验证的用户 ID 和类别 ID 的结果,您可以

$category_ids = [1, 2, 3];
$model->where('category_id', auth()->user->id)->whereIn('user_id', $ids)->get();

如果您想要验证用户或 category_ids 在数组中的位置的结果,您可以

$category_ids = [1,2,3];
$model->orWhere(function($q) use($category_ids) {
    $q->where('category_id', auth()->user->id);
    $q->whereIn('user_id', $category_ids);
})->get();

请注意,如果用户未经过身份验证,这将中断,但我让你去做。

【讨论】:

  • 对不起,我的英语不好,我会尽力解释它,所以我们有 2 个用户 user1 user2,我们有 2 个类别 category1 类别 2 用户 1 创建了 5 行,其中 3 个属于到类别 1,其他 2 属于类别 2 用户 2 已经创建了 5 行,其中 2 属于类别 1,其中 3 属于类别 2 现在用户 1 已经过身份验证,我想向他显示他的所有行加上行这不是从他创建的,而是属于类别 1,因此总和将返回 7 行,其中 5 行是他的行,另外 2 行来自类别 1
猜你喜欢
  • 2021-12-18
  • 2015-08-08
  • 2020-02-18
  • 2018-12-09
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2018-06-19
  • 2016-09-27
相关资源
最近更新 更多