Как вставить запись, используя отношения Eloquent (Laravel)? - PullRequest
0 голосов
/ 07 мая 2018

У меня есть две таблицы: UserActivities и Activities.

Деятельность:

| Column | Type             |
|--------|------------------|
| id     | int              |
| name   | varchar(255)     |
|        |                  |

UserActivities:

| Column      | Type | Comment                  |
|-------------|------|--------------------------|
| id          | int  |                          |
| user_id     | int  |                          |
| activity_id | int  | //id of activity by name |

Теперь, чтобы вставить элемент Item в UserActivity Модель, мне нужно написать два утверждения, как это

$activity = Activity::where('name', '=', 'user_login')->first();
UserActivity::create(['user_id' => Auth::login(), 'activity_id' => $activity->id]);

Хотя это нормально, но я только что прочитал Красноречивые отношения и задаюсь вопросом, существует ли способ создать belongsTo или какое-либо отношение и вставить его напрямую, как это

UserActivity::create(['user_id' => Auth::login(), 'activity' => 'user_login']);

И он автоматически вставляет activity_id при поиске по имени? Возможно ли это?

1 Ответ

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

Проведя дополнительное исследование после прочтения комментария @kerbholz, я думаю, что это способ сделать это?

Activity.php (модель)

class Activity extends Model {
    public function user_activities() {
        return $this->hasMany(UserActivity::class);
    }
}

Основной код:

Activity::where('name', '=', 'user_login')->first()->user_activities()
    ->create(['user_id' => Auth::id()]);

Или в моем случае это гарантирует, что имя действия всегда существует:

Activity::updateOrCreate(['name' => 'user_test'])->user_activities()->create(['user_id' => 1]);
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...