ティム・ルイス:
だから、私は次のモデルがあります:
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の提案に続きextends
にModel
期待どおりに動作:
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);
}