2017-12-05 7 views
0

私は2つのテーブルを持っていますcar_categoryフィールドにはidを持つタイプです。 フィールドc_id(FK参照番号 - id)の車両という別のテーブル。 タイプのFK(c_id)値を表示します。私はLaravelで外部キー値を選択する方法

class Car extends Model 
{ 
    protected $guarded = []; 
    protected $table = 'car_category'; 

    public function vehicles() 
    { 
     return $this->hasMany('Vehicle'); 
    } 
} 

車両モデル、このため

class Vehicle extends Model 
{ 
    protected $guarded = []; 
    protected $table = 'vehicles'; 
    public function cars() 
    { 
     return $this->belongsTo('Car'); 
    } 
} 

何ができるでしょう私のクエリ、モデル内のコードの下にきた ?私はこのコードを試したが、結果の誤り。

$vehicles = "SELECT cars.cartype,vehicles.model FROM cars,vehicles 
      WHERE cars.id = vehicles.c_id"; 

どうすればこの問題を解決できますか?誰か助けてくれますか?あなたはCar::first()を選択することができますclass carからその後class Car

+0

あなたのクラスの車は 'Car'する必要があります –

+0

どのようなクエリについて何か間違い? – usertest

+0

私はあなたのテーブルと混同しています。クエリは 'cars'と' vehicles'を持ちます。モデルは 'car_category'と' vehicles'を持っています。 –

答えて

0

試用版

class Car extends Model 
{ 
protected $guarded = []; 
protected $table = 'car_category'; 

public function vehicles() 
{ 
    return $this->hasMany(Vehicle::class, 'c_id'); 
} 
} 

車両モデル

class Vehicle extends Model 
{ 
    protected $guarded = []; 
    protected $table = 'vehicles'; 

    public function cars() 
    { 
    return $this->belongsTo(Car::class, 'c_id'); 
    } 
} 

雄弁には、モデル名に基づいて、関係の外部キーを決定します。この場合、Carモデルは自動的にcar_id外部キーを持つとみなされます。あなたはこの規則を無効にしたい場合は、あなたが積極的なロードを使用してクエリを行うことができます

https://laravel.com/docs/5.5/eloquent-relationships#one-to-one

が自分の車両情報と一緒に車を取得するメソッドに2つ目の引数を渡すことができ

$result = Car::with('vehicles')->get(); 
+0

ありがとうございます。 – usertest

+0

車の情報とともに、Eager Loadingを使用してクエリを実行することができます。 $ result = Car :: with( 'vehicles') - > get(); – Bivin

+0

Okで、 '$ result-> vehicles-> car_type;を使って車両テーブルのデータを取得しますか? – usertest

0

変更、関連テーブルのデータがCar::first()->vehicles

で見つけることができますが、より多くを持っている場合も、モデルに()メソッドを追加することができます一つのレコードよりも、あなたが使用してクエリを行うことができます彼らのVehicle情報と一緒にCarを取得するにはforeachの()

+0

サンプルの例を教えてもらえますか? – usertest

1

を使うEager Loading

$result = Car::with('vehicles')->get(); 
あなたが FQNを指定せずに文字列リテラルとしてクラス名を指定しているもう一つの補正は、モデル内の関係が定義されている必要があり

完全修飾名を使用して

カーモデル

class Car extends Model 
{ 
    protected $guarded = []; 
    protected $table = 'car_category'; 

    public function vehicles() 
    { 
     return $this->hasMany(\App\Models\Vehicle::class); 
    } 
} 

車両モデル

class Vehicle extends Model 
{ 
    protected $guarded = []; 
    protected $table = 'vehicles'; 
    public function cars() 
    { 
     return $this->belongsTo(\App\Models\Car::class); 
    } 
} 
+0

HasRelationships.php(行487)の 'Class 'Vehicle' not found' – usertest

+0

@ saranyaあなたのモデルに' App \ Models'以外の異なる名前空間を使用している場合は私の回答もudpatedしています。関係を定義しています –

+0

Ok.ビューブレードでテーブルデータを取得する方法。$ result-> vehicles-> car_type; 'Right? – usertest

0
In Model, 
class Vehicle extends Model 
{ 
protected $guarded = []; 
protected $table = 'vehicles'; 

public function cars() 
{ 
return $this->belongsTo(Car::class, 'c_id'); 
} 
} 
コントローラで

$vehicles = Vehicle::all(); 
    return view('vehicles.vehicle',['vehicles'=>$vehicles]); 
関連する問題