2017-08-05 56 views
0

我有问题建立与雄辩的关系。 我有两个创建的模型,Spielplan和Verein。在模型Spielplan中,我有Team_ID和Spiel_ID字段。在模型Verein中,我有字段V_ID和名称。现在我需要加入这两张关于Team_ID = V_ID的表格。雄辩地加入在哪里条款

这是我的模型

<?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和名称。

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但第二回声还给ErrorException试图让非对象的属性。 我的代码有什么问题?

+0

似乎'$ da-> vereinFunction'为空或为空 –

+0

您是否想出了一个解决方案呢? – Jonathan

回答

0

尝试编辑这一行:

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

with()可以让你获取你使用get()时间的关联。在使用get()后,您正在处理一个集合,并且无法再次查询数据库。

0

尝试指定模型主键作为第三个参数,因为如果不是,Laravel会认为它被命名为id,但情况并非如此。 (我使用Codeigniter的日子),但自从我在三年前开始使用Laravel以来,我遵循Laravel约定(建议,但没有强加)。我现在用小写字母命名,(蛇形)复数,表格字段也是小写字母。模型奇异,相似的对应表,关系函数名称作为相关模型,如果关系对一个是单数的,如果对多个复数等等。这个优点在模型关系声明中反映出来,这更加简单和容易界定。

例如(仅作为上述示范),

表(具有关系一对多:

管理者(PrimaryKey的: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; 
} 

为此E可以做到这一点:

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

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

还有:

$technician->manager->name; 

记住,正确的模型关系定义将节省大量的头痛一路走来,像你有一个

希望这个帮助在任何方面