【问题标题】:Mysql,Php,Laravel checkbox errorMysql,Php,Laravel复选框错误
【发布时间】:2017-05-12 19:56:22
【问题描述】:

我有下一个问题。我该如何解决这个问题?我有两张桌子vehiclesvehicles_extras。在第一个表中有很多列。在第二个表中,我只有 4 列:

id, vehicle_id, vehicletype, vehicle_extra

id 是自动递增的,vehicle_id 来自第一个表的id 列,'vehicletype' 是一个字符串,车辆的类型,vehicle_extra 是附加的数量。

所以我有一个搜索表单,extras 是复选框,extra[] 在哪里。在web.php 我有这个代码:

$data1=DB::table('vehicles_extras')->where('vehicletype','$vt')->where('vehicle_extra',$extras);

....

if(Input::has('extras'))
    $query->union($data1);
$data=$query->get();

为此我得到错误:

SQLSTATE[21000]: 基数违规:1222 使用的 SELECT 语句有不同的列数(SQL: (select count(*) as aggregate from vm_vehicles where vehicletype = car) union (select * from @ 987654335@ 其中vehicletype = 汽车和vehicle_extra = 2))

但是好吧,假设它正在工作,但我有更多值的数组,所以我想使用 whereIn

有什么想法吗?我使用 Laravel 5.3。

【问题讨论】:

  • 您是要获取两个表中匹配的所有数据(即SELECT * FROM vehicles WHERE...; SELECT * FROM vehicles_extras WHERE...)还是要获取数据并将vehicles.id 匹配到vehicles_extras.vehicle_id?如果是第一个,请单独获取每个表,而不需要 where,因为听起来您想要所有数据。如果是第二个,请使用JOIN 子句。

标签: php mysql laravel-5.3


【解决方案1】:

首先,您必须在vehiclesvehicles_extras 之间创建one-to-many 关系。

在您的 Vehicle 模型中添加以下关系:

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

那么你可以查询为:

Vehicle::whereHas('vehicleExtras', function ($q) use($extra) {
    $q->where('vehicletype', 'car')
      ->whereIn('vehicle_extra', $extra);
})->get();

【讨论】:

  • 谢谢,但现在我收到此错误:Column not found: 1054 Unknown column 'vm_vehicles_extras.vehicle_search_id' in 'where clause' (SQL: select count(*) as aggregate from vm_vehicles` 其中vehicletype = 汽车并且存在(从vm_vehicles_extras 中选择*,其中vm_vehicles_extras.vehicle_search_id = vm_vehiclesidvehicletype 为空,vehicle_extra 在 (4)))`
  • 最大的问题,不知道vm_vehicles_extras.vehicle_search_id是哪里来的?
  • 在您的问题中显示您的表格结构。
猜你喜欢
  • 1970-01-01
  • 2013-09-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 1970-01-01
  • 2021-10-05
  • 2017-05-15
  • 1970-01-01
相关资源
最近更新 更多