【问题标题】:How To Join Explode Data in Laravel如何在 Laravel 中加入爆炸数据
【发布时间】:2020-04-03 06:48:22
【问题描述】:

我正在开发一个拼车应用程序,根据Laravel 中的以下查询的状态显示当前可用的汽车

 $cars = CarType::select('id')->where('status','Active')->get();

我需要实现一个用户招聘偏好,用户可以在其中保存他想租用的服务。为此,我计划将用户首选的carid's 保存为users 表中的逗号分隔值,如下所示

然后我想根据每个用户的偏好显示汽车,例如

select c.id from car_type c
INNER JOIN
users u 
on c.id in **car id's saved in ride_preferences column in users table**
and c.status='Active'
where('id', $user_details->id)->first();// my current laravel query to check current user

如何在Laravel 中编写上述查询?

【问题讨论】:

  • 在 $user_details 变量中你有用户对象吗?
  • $user_check = User::where('id', $user_details->id)->first();
  • tbh,在逗号分隔的列中使用首选的carId 对于适当的关系数据库来说并不是一个好主意。但考虑到你有点卡住,我只能提供this approach that uses a rather complicated stored procedure。您可以将管道(|)更改为逗号,然后先修剪输出。如果您想将逻辑保留在应用程序中,那么执行循环是您最好的选择(但它会更糟地影响您的性能)。奇怪的问题,表结构是固定的还是我们有机会解决问题?
  • 我认为您的数据库 (Mysql) 选择对于拼车应用程序是不正确的,请考虑在 100-150 个同时连接后您将收到的应用程序设计和流量。还有其他像 RethinkDB 这样的开源实时数据库,只要我的 2 美分
  • @MahmoudMostafa 我知道这一事实,但我只是将其列为示例。

标签: jquery mysql laravel


【解决方案1】:

要在关系数据库中解决这个问题,有一种更好的方法。创建关系结构。

ride_preferences
int id
int user_id
int car_id

用户模型

public function ridePreferences()
{
    return $this->hasMany(RidePreferences::class);
}

RidePreference 模型

public function car()
{
    $this->belongsTo(Car::class);
}

然后查询。

$carsPreferred = User::with('ridePreferences.car')->first()->ridePreferences->map->car;

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2015-06-11
    • 1970-01-01
    • 2018-09-04
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2022-01-16
    相关资源
    最近更新 更多