Laravel: Как создать новую строку и прикрепить ее к моей модели - PullRequest
0 голосов
/ 10 мая 2018

У меня сейчас 2 модели / таблицы;

Table1Model;
Table2Model;

table_1
table_2

Теперь одна Table1Model имеет одну Table2Model, и одна Table2Model может быть присоединена ко многим Table1Model.

У меня есть следующие отношения:

В моей Table1Model:

public function table_2(){
    return $this->belongsTo(Table1Model::class);
}

В моей Table2Model:

public function table_1(){
    return $this->hasMany(Table2Model::class);
}

У меня проблемы с подключением Table2Model к Table1Model (и наоборот, но я бы не стал иным способом), то, как я сейчас это делаю, это с помощью этого метода в моей Table1Model;

public function setTable2($table_2)
{
    $this->table_2_id = ($table_2->id);
    $this->save();
}

Это просто кажется немного неуклюжим, как правильно это сделать? Я заблудился в документации Laravel, пытаясь выяснить!

Ответы [ 2 ]

0 голосов
/ 11 мая 2018

Надеюсь, это расскажет, как вы можете воспользоваться преимуществами отношений.

$record = Table2Model::find(1); 
// Returns an ActiveRecord of Table2

dd(record->table_1);
// I think of dd as a friendlier version of var_dump and die
// table_1 being the relationship name, you can see all records that are
// related to that model.
// (you may need to add 'table_1' to $visible property in the Table2Model),

Вы можете вставить Table1Model (относится к Table2Model), используя следующее:

$record = Table2Model::find(1);
$record->table_1()->create($arrayOfTable1Data);

Вы также можете удалить все записи Table1Model, связанные с Table2Model, выполнив ->delete() в отношении (после того, как вы получили ActiveRecord для него)

$record = Table2Model::find(1);
$record->table_1()->delete();

С другой стороны, это не так просто из-за предоставленного вами примера (Table2Model имеет много Table1Model, то есть вы не можете вставить Table1Model без существующей записи Table2). Что вы можете сделать, если значение foreign_key можно обнулять, это:

$record = Table1Model::create($arrayOfTable1Data);
arrayOfTable1Data['table2_id'] = $record->table_2()->create($arrayOfTable2Data)->id;
$record->table_1()->update($arrayOfTable1Data);

Личная заметка: Мне нравится давать именам отношений имена других моделей и делать их единичными или множественными (например, отношения с именами пользователь или пользователи) в зависимости от того, имеет ли она 1 зависимость или имеет много.

0 голосов
/ 10 мая 2018
Table1Model::find(1)->table2()->associate(Table2Model::find(1))->save()
Table2Model::find(1)->table1()->save(Table1Model::find(1))

Вы можете найти информацию о режиме здесь: https://laravel.com/docs/5.6/eloquent-relationships#inserting-and-updating-related-models

Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...