Laravel - モデル::作成()に動作しますが、属性が欠落しています

ティム・ルイス:

だから、私は次のモデルがあります:

class Recursive extends Model {
  public function __construct() {
    parent::__construct();
  }
  // ...
}

class Place extends Recursive {
   protected $table = 'places';
   protected $fillable = ['name', 'parent_id'];
   // ...
}

次のコードは、新しいを作成するために使用されますPlace

$place = Place::create([
  'name' = 'Second',
  'parent_id' => 1
]);

このデータベース内の次のレコードの結果:

| Actual                    | Expected                  |
---------------------------------------------------------
| id | name     | parent_id | id | name     | parent_id | 
| 1  | 'Top'    | NULL      | 1  | 'Top'    | NULL      |
| 2  | NULL     | NULL      | 2  | 'Second' | 1         |

あなたが見ることができるように、設定されている唯一の値は自動インクリメントであるid列。私が作成しようとしている2列はでありfillable、配列、及びモデルが作成されますが、それは正しく関連付けられていません。

誰もが前に、この問題に遭遇していますか?私は、私のような、別の方法を使用することができます知っています

$place = new Place();
$place->name = 'Second';
$place->parent_id = 1;
$place->save();

しかし、これは私がこのコードを使用していて、私はこのような負けない機能性を好むスポットではありません。

編集:については、以下のクエリログのショーを有効にcreate()電話を:

array (
  'query' => 'insert into `places` () values ()',
  'bindings' => 
  array (
  ),
  'time' => 1.26,
),

さらに、編集:MySQLのログは上記と同じ出力を持って有効にします。元に戻すのMiken32の提案に続きextendsModel期待どおりに動作:

array (
  'query' => 'insert into `places` (`name`, `parent_id`) values (?, ?)',
  'bindings' => 
  array (
    0 => 'Second',
    1 => '1'
  ),
  'time' => 1.21,
),
miken32:

チェックIlluminate\Database\Eloquent\Modelクラス、コンストラクタは次のようになります。

public function __construct(array $attributes = [])
{
    $this->bootIfNotBooted();
    $this->initializeTraits();
    $this->syncOriginal();
    $this->fill($attributes);
}

しかし、あなたはあなたでこれをオーバーライドRecursiveクラス:

public function __construct()
{
    parent::__construct();
}

成功したクエリを作成することができませんでしたので、属性は、コンストラクタに渡されていませんでした。あなたはそれが何をやっていないので、コンストラクタを削除、またはその代わりにこれを使用することもできます。

public function __construct(array $attributes = [])
{
    parent::__construct($attributes);
}

おすすめ

転載: http://10.200.1.11:23101/article/api/json?id=373531&siteId=1