2016-04-11 15 views
1

Laravelで1対多関係に問題があります。データベースからデータを取得できません。私のコードは以下のとおりです。Laravelは1対多を使用してデータを取得できません

Doctor.php

public function cities() 
{ 
    return $this->belongsTo('App\City'); 
} 

City.php

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

ビュー私はデータANを表示しよう

@foreach($doctors as $doctor) 
    <tr> 
     <td data-title="ID">{{ $doctor->id }}</td> 
     <td data-title="Name">{{ $doctor->name }}</td> 
     <td data-title="Hospital">{{ $doctor->hospital }}</td> 
     <td data-title="Designation">{{ $doctor->designation }}</td> 
     <td data-title="City">{{ $doctor->cities->name }}</td> <!-- problem in this line --> 
    </tr> 
@endforeach 

エラーが示されている:

ErrorException 46 3d7f581c490d492093e6e73f8ebd29525504e56b.php行に:D:

は非オブジェクト(ビューのプロパティを取得しようとする医師\ \ xamppの\ htdocsにtourismsの\ルート\リソース\ \ビュー\ index.blade.php)

+0

'$ queries = DB :: getQueryLog();で構築されたクエリを確認できますか? $ last_query = end($クエリ); echo $ last_query; 'phpmyadminで実際に作成されたクエリを確認してください。 –

+0

あなたに関連する都市がない医師はいますか? – Laerte

+0

いいえ、すべての医者は都市を持っています。 @Laerte – smartrahat

答えて

1

あなたはコレクションではなく配列をループしようとしています。

2ソリューション:

1) アドオン - >(GET);あなたは、コントローラ

2)また

@foreach($doctors as $doctor) 

迅速な先端の

@foreach($doctors->all() as $doctor) 

代わり
使用中のあなたとの関係を呼び出しているとき:
あなたの命名は、本当に何を言っていませんやっている。あなたは以下のようにそれらを交換する必要があります。 &で

Doctor.php

public function city() 
{ 
    return $this->belongsTo('App\City'); 
} 

City.php

public function doctors() 
{ 
    return $this->hasMany('App\Doctor'); 
} 
+1

最初の部分が正しくありません。 'foreach'を使ってLaravel' Collection'をループすることができます。 Laravel 'Collection'は、[' IversatorAggregate'](http://php.net/manual/en/class.iteratoraggregate.php)インターフェースを実装しています。このインターフェースは[Traversable'](http://php.net/ manual/en/class.traversable.php)インターフェースで、 'foreach'での使用が可能です。 – patricus

2

'を、市内には多くの医師を持っている' '医師は都市に属しています' belongsTo側の関係、外部キー名がspeでない場合それは関係の名前を使って作られています。この場合、関係の名前はcitiesであるため、Laravelはフィールドdoctors.cities_idを探します。

あなたの外部キーがcities_idない場合、あなたはあなたの関係のメソッドの名前を変更、または外部キーの名前を指定するか必要があります。

また
public function cities() { 
    return $this->belongsTo('App\City', 'city_id'); 
} 

// or, better: 

public function city() { 
    return $this->belongsTo('App\City'); 
} 

、@Christophvhで述べたように、あなたの関係の名前はちょっとしたものですが、プログラム的には間違っているわけではありません。 belongsTo/hasOneの関係が単数形であり、belongsToMany/hasManyの関係が複数の場合は、より理にかなって読みやすくなります。

関連する問題