簡體   English   中英

在Laravel 4 Eloquent ORM中創建子關系時出錯

[英]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_keylocal_key等於“ id”。 foreign_key是關系的主鍵。

對於belongsTo,它是:

return $this->belongsTo('ClassName', 'local_key', 'foreign_key');

默認情況下, local_keyforeign_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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM