无法上班的Laravel模特有很多关系

时间:2015-01-15 16:22:08

标签: php laravel eloquent

我有2张表,关系非常复杂。表users具有表images的两个外键,表images具有表users的一个外键,该外键与其他两个外键无关。

我无法正确制作模特。我需要这样所有引用的字段都与模型相关联,以便images中有User属性,它返回该用户拥有的所有图像。
这是我的表生成代码:

Schema::create('users', function ($table) {
  $table->increments('id')->unsigned();

  $table->integer('portrait')->unsigned()->nullable();
  $table->integer('backimg')->unsigned()->nullable();

  $table->timestamps();
});
Schema::create('images', function ($table) {
  $table->increments('id')->unsigned();

  $table->integer('owner')->unsigned();
  $table->foreign('owner')->references('id')->on('users');

  $table->timestamps();
});
Schema::table('users', function($table) {
  $table->foreign('portrait')->references('id')->on('images');
  $table->foreign('backimg')->references('id')->on('images');
});

这是我对模特的尝试:

class User extends Eloquent implements UserInterface, RemindableInterface {
    public function backimg(){
        return $this->hasOne('Image', 'backimg');
    }
    public function portrait(){
        return $this->hasOne('Image', 'portrait');
    }
    public function images(){
        return $this->belongsTo('Image', 'owner');
    }
}
class Image extends Eloquent {
    public function owner(){
        return $this->hasOne('User', 'owner');
    }
}

我认为上面的代码应该可以工作,但是所有属性都返回字符串而不是对象。

1 个答案:

答案 0 :(得分:2)

您不能将关系命名为与外键列的名称相同!

更改任何一个都应该有效,但是我建议您将外键列更改为owner_idportrait_id等等。然后您也不需要在关系中指定外键列因为你使用的是传统的名字。