我试图像Laravel中的部落战争一样进行浏览器游戏。
我希望使用$wioska->buildings->Tartak->level
来提升建筑水平,但是不起作用:
这是我的建筑模型:
class Building extends Model
{
protected $table = 'budynki';
public function Tartak(){
return $this->hasOne('App\Tartak');
}
}
Wioska(村)模型:
class Wioska extends Model
{
protected $fillable = ['name', 'user_id'];
protected $table = 'wioski';
public function user(){
return $this->belongsTo('App\User');
}
public function buildings(){
return $this->hasOne('App\Building');
}
}
这是我的Tartak模特:
class Tartak extends Model
{
protected $table = 'budynki';
public function level(){
$u = Auth::user();
$id = $u->wioska->id;
return DB::table('budynki')->where('wioska_id', $id)->first();
}
}
迁移" budynki":
public function up()
{
if(!Schema::hasTable('budynki')) {
Schema::create('budynki', function (Blueprint $table) {
$table->integer('town_hall')->default(1);
$table->integer('iron')->default(0);
$table->integer('wood')->default(0);
$table->integer('stone')->default(0);
$table->integer('bread')->default(0);
$table->integer('wioska_id');
$table->foreign('wioska_id')->references('id')->on('wioski');
});
}
}
答案 0 :(得分:0)
1)在尝试调用其方法之前检查null实体总是好的。例如,如果$wioska->buildings
为null或者wioska没有建筑物,或者建筑物没有Tartak,那么该行的其余部分将抛出错误。
2)level()
是一种方法,因为它不是真正的Laravel关系,你需要将它用作方法,例如 - $wioska->buildings->Tartak->level()
答案 1 :(得分:0)
level
不属性,因此您必须尝试以下
$wioska->buildings->Tartak->level()
答案 2 :(得分:0)
现在我有了
SQLSTATE [42S22]:未找到列:1054未知列' budynki.building_id'在' where子句' (SQL:select {from budynki
其中budynki
。building_id
为空且budynki
。building_id
不为空限制1)错误
我只想从budynki表获得tartak级别:https://i.imgur.com/zoTx5tE.png。