web-dev-qa-db-ja.com

関係を持つ雄弁なモデルを作成する方法?

関係を持つ雄弁なモデルを作成する方法?

私が持っています:

人物テーブル

id
firstname
lastname

従業員テーブル

id
person_id
position

私はこのようなことをしたいです:

Employee::create([
'firstname' => 'Jack',
'lastname' => 'London',
'position' => 'writer'
])

2つのモデルを作成して関連付けることができます。しかし、これをもっと美しくする方法はあるのでしょうか?

7
Stanislav

まず、Personモデルでリレーションを作成する必要があります

class Person extends Model
{
    protected $fillable = ['firstname', 'lastname'];

    public function employee()
    {
        return $this->hasOne('App\Employee');
    }
}

その後、コントローラで次のことができます:

$person = Person::create($personData);
$person->employee()->create($employeeData);

@ Alexey Mezenin が言及しているように、使用できます:

$person = Person::create(request()->all());
$person->employee()->create(request()->all());

また、逆になります:

class Employee extends Model
{
    protected $fillable = ['position'];

    public function person()
    {
        return $this->belongsTo('App\Person');
    }
}
11
DokiCRO

あなたはまだ人を最初に作成する必要があるので、あなたが読み取り可能でサイズを変更する解決策を探しているなら、あなたはこれを行うことができます:

$data = [
    'firstname' => 'Jack',
    'lastname' => 'London',
    'position' => 'writer'
];

$person = Person::create($data);
$person->employee()->create($data);
6
Alexey Mezenin