【问题标题】:Laravel + query from DBLaravel + 从数据库查询
【发布时间】:2021-05-09 08:34:54
【问题描述】:

美好的一天! :)

问题是我不能(不明白,也不知道)如何在一个查询中指定两个表的比较。

我们有 2 张桌子:

  1. 汽车
  2. 项目

汽车结构:

  • 身份证
  • car_id
  • 价格

库存结构:

  • 身份证
  • user_id
  • car_id
$cars = \DB::table('cars')
        ->select('cars.id', 'cars.car_id','cars.name', 'cars.price')
        ->orderBy('id')
        ->get();

在views/pages/index.blade.php中

@foreach($cars as $cars)
{{$cars->name}}<br>
Price: {{$cars->price}}<br>
You have: **?????**
@endforeach

一个例子应该是:

CarName
Price: 1600
You have: 2

CarNameTwo
Price: 1400
You have: 0

CarNameMore
Price: 100
You have: 1

但是,我怎样才能包括“你有”? 我只能得到一个数据数组的列表,比如:

[
  {
    "car_id":1,
    "car_id":4
  }
]

但它在foreach 中不起作用。

【问题讨论】:

  • 您好,您知道您使用的是哪个版本的 Laravel 吗?我不确定你的情况,但我想知道这是否可能是使用 "many to many" relationship 或类似的东西的机会?否则,您可能能够通过两个查询而不是一个查询来获得所需的结果(例如,一个查询汽车,另一个查询库存),但这可能不那么优雅。
  • 可以使用php函数count()
  • user_id 有什么关系?您是否正在尝试获取特定用户的汽车列表?还是带有库存的用户列表?

标签: php mysql laravel


【解决方案1】:

@h3x3x 您在cars 表的描述中没有cars.name,但您确实在所需的结果集中列出了它。如果您的cars 表中确实有一个名为name 的列,您可以通过在查询中使用leftJoinDB::raw()groupBy 语句来获得您正在寻找的结果集,就像这样:

$cars = \DB::table('cars')
    ->leftJoin('inventory', 'cars.car_id', '=', 'inventory.car_id')
    ->select('cars.id', 'cars.name', 'cars.price', \DB::raw('COUNT(DISTINCT inventory.id)'))
    ->groupBy('cars.car_id')
    ->orderBy('cars.car_id`)
    ->get()

这将返回 cars.name 中列出的汽车名称、cars.price 中列出的汽车价格以及 inventory 表中的汽车数量(或缺少) cars.car_id.

如果这不是您需要的,请告诉我,我会尽力提供进一步帮助。

【讨论】:

  • 太好了:)它的工作!谢谢!但是 ->where('inventory.user_id', $this->user->id),查询限制输出,显示 olny 这个用户,而不是所有的“汽车”
【解决方案2】:

美好的一天! Laravel 诉 6.20.14

这是我的大问题中的“非常轻”的例子:)

好的,我会在图片中显示给你看 “应该如何”

我们需要从cars 表中取出所有内容,但只计算我们拥有的那些 除了这个计数之外,还有其他行需要显示,但现在不涉及它们

我还设法得出结论,只有那些机器存在,但不是全部:(

我们在表中的内容并不那么重要inventory 如果我们尝试仅通过 car_id 得出结论?

【讨论】:

    【解决方案3】:

    因此,试错系统表明,如果我们通过选择考虑样本,则在输出中设置数组的限制:((

    我完全不知道如何实现这一点,以便从汽车表中获得完整列表

    $cars = Cars::
    leftjoin('inventory', 'cars.car_id', '=', 'inventory.carid')
    ->where('inventory.user_id', $this->user->id)
    ->where('inventory.status', 1)
    ->select('cars.*', DB::raw("inventory.type as type2"), DB::raw('count(inventory.id) as count'), DB::raw("inventory.created_at as time"))
    ->groupBy('inventory.carid','cars.car_id')
    ->orderBy('car_id')
    ->get();
    

    【讨论】:

      猜你喜欢
      • 2014-06-04
      • 2021-12-02
      • 2021-08-20
      • 2017-01-12
      • 2017-08-30
      • 2019-05-12
      • 1970-01-01
      • 1970-01-01
      相关资源
      最近更新 更多