2017-08-05 9 views
0

私は雄弁との関係を構築するのに問題があります。 私はSpielplanとVereinという2つのモデルを作成しました。モデルSpielplanでは、フィールドTeam_IDとSpiel_IDを持っています。 Vereinモデルでは、フィールドV_IDと名前があります。今私はTeam_ID = V_IDについてこの2つのテーブルを結合する必要があります。where句との間接結合

これは私のモデル

<?php 

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Spielplan extends Model 
{ 
    protected $table = 'Spielplan'; 

    public function vereinFunction(){ 
     return $this->hasOne('App\Verein', 'V_ID'); 
    } 
} 

であり、これは私がSpiel_IDと名前を取得したい私のWebルート内の関数です。

Route::get('test', function(){ 
    $spieleT = App\Spielplan::where('Spiel_ID', '=', 30)->get(); 
    foreach($spieleT as $da){ 
     echo $da->Spiel_ID; 
     echo $da->vereinFunction->Name; 
    } 
}); 

最初のエコー作品と私はSpiel_IDを取り戻すが、第2のエコーは、非オブジェクトのプロパティを取得しようとするとErrorExceptionをバック与えます。 私のコードで何が問題になっていますか?

+0

'$ da-> vereinFunction'がnullまたは空であると思われます –

+0

解決策はまだありますか? – Jonathan

答えて

0

は、この行を編集してみてください。

$spieleT = App\Spielplan::with('vereInFunction')->where('Spiel_ID', '=', 30)->get();

with()は、get()を使用したときに関連付けを取得できます。 get()を使用した後、コレクションを使用しているため、データベースに再度照会することはできません。

0

モデルのプライマリキーを3番目の引数として指定してください。そうでない場合、Laravelはその名前にidという名前が付けられていると想定します。

私は何かを提案することができます:私はCodeigniterを使用していた頃のようにテーブルやフィールドに名前を付けましたが、3年ほど前にLaravelを使い始めて以来、課されていない)。私は今、小文字のテーブルを(snakecase)複数、テーブルフィールドもsnakecasm小文字で名前を付けます。モデル単数形、キャメルケース類似の対応表、関連モデルとしての関係関数名、関係が1の場合は特異値、複数の場合は複数の場合などがあります。この利点は、モデル関係の宣言に反映されています。定義します。例えば

(のみ上述のデモンストレーションなど)、多くの関係一つと

テーブル(:

マネージャ(主キー:ID、名前、...) 技術(プライマリーkey:id、foreingkey:manager_id(単数+アンダースコア+ idの関連テーブル名)、名前、.....)

モデル:

マネージャー:

/*関係*/

public function technicians() // see name as related table, plural due to as many relationship) 
{ 
    return $this->hasMany(Technician::class); // as naming convention has followed, you don't need to specify any extra parameters; 
} 

Techician:

/*関係*/

public function manager() // named as related table, singular due to to one relationship 
{ 
    $this->belongsToOne(Manager::class); // again, as naming convention has followed, you don't need to specify any extra parameters; 
} 

そのため

$manager::find(1); 
echo $manager->technicians->first()->name, 

または

foreach ($manager->technicians as $technician) { 
    echo $technician->name; 
} 

など:

$technician->manager->name; 

が適切なモデル関係の定義は次のように、道に沿って頭痛の多くが保存されます、覚えておいてください電子あなたはこれを行うことができますあなたが持っているもの

とにかくこのヘルプをお待ちしています

関連する問題