我的Laravel关系问题

时间:2017-09-17 10:19:08

标签: php laravel

我试图像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');
        });
    }
}

3 个答案:

答案 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其中budynkibuilding_id为空且budynkibuilding_id不为空限制1)错误 我只想从budynki表获得tartak级别:https://i.imgur.com/zoTx5tE.png