如何建立有关系的口才模型?

Sta*_*lav 6 laravel eloquent laravel-5 laravel-5.2

如何建立有关系的口才模型?

我有:

人表

id
firstname
lastname
Run Code Online (Sandbox Code Playgroud)

员工表

id
person_id
position
Run Code Online (Sandbox Code Playgroud)

我想做这样的事情:

Employee::create([
'firstname' => 'Jack',
'lastname' => 'London',
'position' => 'writer'
])
Run Code Online (Sandbox Code Playgroud)

我知道,可以创建两个模型,然后将它们关联。但是也许有办法使它更美丽吗?

Dok*_*CRO 9

首先,您必须在Person模型中创建关系

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

    public function employee()
    {
        return $this->hasOne('App\Employee');
    }
}
Run Code Online (Sandbox Code Playgroud)

之后,您可以在控制器中执行以下操作:

$person = Person::create($personData);
$person->employee()->create($employeeData);
Run Code Online (Sandbox Code Playgroud)

正如@Alexey Mezenin提到的,您可以使用:

$person = Person::create(request()->all());
$person->employee()->create(request()->all());
Run Code Online (Sandbox Code Playgroud)

反之亦然:

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

    public function person()
    {
        return $this->belongsTo('App\Person');
    }
}
Run Code Online (Sandbox Code Playgroud)


Ale*_*nin 5

您仍然需要首先创建人员,因此,如果您正在寻找可读性和大小合理的解决方案,则可以这样做:

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

$person = Person::create($data);
$person->employee()->create($data);
Run Code Online (Sandbox Code Playgroud)