我有问题与雄辩建立关系。 我有两个模型,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;
}
});
第一个echo工作,我回到Spiel_ID,但第二个echo返回ErrorException试图获取非对象的属性。 我的代码出了什么问题?
答案 0 :(得分:0)
尝试编辑此行:
$spieleT = App\Spielplan::with('vereInFunction')->where('Spiel_ID', '=', 30)->get();
。
with()
允许您在使用get()
时获取关联。使用get()
后,您正在使用集合,并且无法再次查询数据库。
答案 1 :(得分:0)
尝试将模型主键指定为第三个参数,因为如果没有,Laravel将假定它被命名为id,而实际情况并非如此。
请允许我向你推荐一些东西:我曾经像你一样命名表格和字段(在我使用Codeigniter的日子里),但自从我三年前开始使用Laravel以来,我遵循Laravel惯例(推荐使用,但是没有强加)。我现在将这些表命名为小写,(snakecase)复数,表字段也是snakecasm小写。模型奇异,类似于相应的表格,关系函数名称作为相关模型,如果关系是一个奇异,复数如果是多,等等。这个的优点是在模型关系声明中反映出来,这更简单,更容易定义。
例如(仅作为上述说明),
表(关系一对多:
经理(主键:id,名称,......) 技术人员(主键:id,foreingkey:manager_id(相关表格名称加上下划线加id),名称,.....)
模型:
管理器:
/ * relationship * /
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:
/ * relationship * /
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;
请记住,正确的模型关系定义会在此过程中避免很多麻烦,例如您拥有的
无论如何希望这有帮助