[英]Error creating children relationship in Laravel 4 Eloquent ORM
我有一個具有2個這樣的模型的結構:
class Contenuti extends Eloquent {
public function dettaglio()
{
return $this->hasOne('ContenutiDettaglio', 'contenuto_id');
}
}
class ContenutiDettaglio extends Eloquent {
public function contenuto()
{
return $this->belongsTo('Contenuti', 'contenuto_id', 'id');
}
}
我正在嘗試擴展Contenuti的findOrNew,以便在創建Contenuti時始終添加一個ContenutiDettaglio項目。
我寫了這樣的擴展名:
public static function findOrNew($id, $coloumns = array())
{
$obj = parent::findOrNew($id);
if(!isset($obj->dettaglio()->id))
{
$obj->save();
$dettaglio = ContenutiDettaglio::create(array('titolo' => 'Nuovo contenuto'));
$dettaglio->contenuto()->associate($obj);
$obj = Contenuti::findOrFail($obj->id);
dd($obj->dettaglio());
}
return $obj;
}
在數據庫中,ContenutiDettaglio中的記錄正確包含了父ID,但是當我轉儲$ obj-> dettaglio()時,其為空。 難道我做錯了什么?
編輯:
這是我的遷移:
#Contenuti
public function up()
{
Schema::create('contenuti', function($t) {
$t->engine = 'MyISAM';
// vecchia tabella "contenuti"
$t->increments('id');
$t->bigInteger('userid')->nullable();
$t->boolean('pubblica');
// vecchia tabella "contenuti_it"
$t->timestamp('pubblica_dal')->nullable();
$t->timestamp('pubblica_al')->nullable();
$t->timestamps();
$t->index('pubblica_dal');
$t->index('pubblica_al');
$t->index('created_at');
$t->index('updated_at');
});
}
#ContenutiDettaglio
public function up()
{
Schema::create('contenuti_dettaglio', function(Blueprint $table)
{
$table->engine = 'MyISAM';
$table->increments('id');
$table->integer('contenuto_id');
$table->string('keywords', 255);
$table->string('titolo', 255);
$table->text('sottotitolo');
$table->text('occhiello');
$table->text('riassunto');
$table->text('descrizione');
$table->index('contenuto_id');
$table->index('titolo');
});
}
其中contenuti_dettaglio中的contenuto_id是2個表之間的鍵。
首先,這是Eloquent中有關關系的文檔: http : //laravel.com/docs/4.2/eloquent#relationships
因此,hasOne的基本語法是:
return $this->hasOne('ClassName', 'foreign_key', 'local_key');
默認情況下, foreign_key
和local_key
等於“ id”。 foreign_key
是關系的主鍵。
對於belongsTo,它是:
return $this->belongsTo('ClassName', 'local_key', 'foreign_key');
默認情況下, local_key
和foreign_key
再次等於“ id”。 Contenuti模型中子項的鍵由hasOne
方法的foreign_key
定義。 我不知道您的確切數據庫架構,但是我想您可以通過更改來解決此問題:
return $this->belongsTo('Contenuti', 'contenuto_id', 'id');
同
return $this->belongsTo('Contenuti', 'id', 'contenuto_id');
讓我知道這是否有效,如果無效,請為這些表附加遷移文件。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.