无法开始工作 Laravel 个有很多关系的模型
Can't get to work Laravel models with many relationships
我有 2 个 table 关系相当复杂。 Table users
有两个外键到 table images
和 table images
有一个外键到 table users
与其他两个外键无关。
我无法正确制作模型。我需要所有引用的字段都与模型相关联,并且 User
中有 images
属性,其中 return 是该用户拥有的所有图像。
这是我的 table 生成代码:
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');
}
}
我认为上面的代码应该可以工作,但是所有属性 return 字符串不是对象。
您不能将关系命名为与您的外键列名称相同的名称!
更改任何一个都应该有效,但是我建议您将外键列更改为 owner_id
、portrait_id
等...那么您也不需要在中指定外键列你的关系,因为你使用的是约定俗成的名字。
我有 2 个 table 关系相当复杂。 Table users
有两个外键到 table images
和 table images
有一个外键到 table users
与其他两个外键无关。
我无法正确制作模型。我需要所有引用的字段都与模型相关联,并且 User
中有 images
属性,其中 return 是该用户拥有的所有图像。
这是我的 table 生成代码:
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');
}
}
我认为上面的代码应该可以工作,但是所有属性 return 字符串不是对象。
您不能将关系命名为与您的外键列名称相同的名称!
更改任何一个都应该有效,但是我建议您将外键列更改为 owner_id
、portrait_id
等...那么您也不需要在中指定外键列你的关系,因为你使用的是约定俗成的名字。