【问题标题】:Laravel Eloquent Only Get One RowLaravel Eloquent 只获得一排
【发布时间】:2021-05-11 07:25:21
【问题描述】:

所以我想显示订单表中的 id,其中用户 id 与当前登录用户 id 相同,然后用于显示用户已下订单

$orderId = Order::select('id')->firstWhere('user_id', auth()->id())->id;

$orders = SubOrder::where('order_id', $orderId)->orderBy('created_at', 'desc')->get();

它可以工作,但它只显示第一条记录,后来我发现问题出在$orderId上,它只显示第一条记录。但我希望它是所有的记录。如果我将 id 更改为 get(),它不会显示任何内容,因为它给出的结果类似于“id = 1”,而不仅仅是数字。还尝试将 firstWhere 更改为 where 并出现错误,例如“Property [id] 在 Eloquent 构建器实例上不存在。”
请帮忙,谢谢

【问题讨论】:

  • 你到底想要什么??获取当前登录用户子订单的所有订单??
  • suborder 只是名称,实际上和订单的记录相同,但更详细。主要问题是 $orderId 只显示第一条记录而不是所有记录 id
  • SubOrder 将返回与 order_id $orderId 一样多的行

标签: laravel eloquent


【解决方案1】:

如果您要在获得第一个Order 后不久使用与User 关联的另一个Orders,请返回所有相关的Orders,然后在需要时获取第一个。

$orders = Order::where('user_id', auth()->user()->id)->get();

$firstOrder = $orders->first();

$subOrders = SubOrder::whereIn('order_id', $orders->pluck('id'))->get();

或者,您可以使用在 Order 模型上定义的 subOrders 关系。

class Order extends Model
{
    public function subOrders()
    {
        return $this->hasMany(SubOrder::class);
    }
}
$orders = Order::where('user_id', auth()->user()->id)->get();

$firstOrder = $orders->first();

$firstOrderSubOrders = $firstOrder->subOrders;

如果您确信自己将使用 SubOrder 记录,则可以在 Order 上使用即时加载来提高性能。

$orders = Order::where('user_id', auth()->user()->id)
    ->with('subOrders')
    ->get();

$firstOrder = $orders->first();

$firstOrderSubOrders = $firstOrder->subOrders;

【讨论】:

  • @Binz 好东西。我添加了一些替代方法供参考。
【解决方案2】:

first() 将返回查询到的第一个 id 并停止执行。

$firstOrder = $orders->first();

【讨论】:

    猜你喜欢
    • 2021-08-30
    • 1970-01-01
    • 2017-07-04
    • 1970-01-01
    • 2018-02-10
    • 2016-10-24
    • 2014-07-18
    • 1970-01-01
    • 2019-11-16
    相关资源
    最近更新 更多