2016-12-28 6 views
1

私は次の質問があります。どのようにして問題を解決できますか?私は2つのテーブルvehiclesvehicles_extrasを持っています。最初のテーブルには多くの列があります。私は4列有している二番目の表において:Mysql、PHP、Laravelチェックボックスエラー

id, vehicle_id, vehicletype, vehicle_extra 

idは自動インクリメントであるが、vehicle_idは、最初のテーブルから、「vehicletype」は車両のストリング、タイプidカラムである、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]: Cardinality violation: 1222 The used SELECT statements have a different number of columns (SQL: (select count(*) as aggregate from vm_vehicles where vehicletype = car) union (select * from vm_vehicles_extras where vehicletype = car and vehicle_extra = 2))

しかし、[OK]を、のは、それが働いているとしましょう、しかし、私が持っていますより多くの値を持つ配列、whereInを使用したいと思います。

私はLaravel 5.3を使用します。

+0

あなたは両方のテーブルに一致するすべてのデータを取得しようとしている(つまり、 '* SELECT FROM vehicles WHERE ...; SELECT * FROM vehicles_extras WHERE ... ')、またはデータを取得しようとしていますか?vehicles.idをveh_extras.vehicle_idに一致させようとしていますか?それが最初の場合は、すべてのデータを必要としているように聞こえるので、どこにもなく各テーブルを個別に取得します。 2番目の場合は、 'JOIN'節を使用します。 – aynber

答えて

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(); 
+0

Thxだが、このエラーが発生する: '列が見つかりません:1054不明な列 'vom_vehicles_extras.vehicle_search_id' in 'where句'(SQL:' vehiclemletype' = carである 'vm_vehicles'からの集計としてSQLを選択します。 (vm_vehicles_extras'、 'vm_vehicles_extras'、' vm_vehicles''、 'vm_vehicles'、' vehicletype'はヌル、 'vehicle_extra'は(4)))' –

+0

から選択してください。 'vm_vehicles_extras.vehicle_search_id'ですか? –

+0

質問の表構造を表示してください。 –

関連する問題