Данные отношения HasMany (или любые отношения) вставлены, но не возвращаются в одно и то же время |Laravel |Красноречивая модель - PullRequest
0 голосов
/ 06 марта 2019

У меня есть приложение laravel, в котором setting_types и настройки пользователя сохраняются в разных моделях.

User.php :

/*
 * Getting the user's notification setting.
*/
public function notificationSetting()
{
    return $this->hasMany('App\NotificationSetting');
}

/*
 * Controller function to get the user's settings
*/
public function getSetting(Request $request)
{
    $userSetting = $user->notificationSetting;
    // check new settings are inserted for user or not.
    if (someCondition) {
        // add new settings for user.
        $user->notificationSetting()->save(new NotificationSetting(['user_id' => $user_id, "notification_type_id" => 121]));
        print_r($user->notificationSetting); // still rec. Old values.
    }
    return $user->notificationSetting;
}

Как вы можете видеть, я вставляю объект отношения, но не получил в то же время.и если я нажму еще раз (на этот раз мое someCondition станет false), он вернет записи обновления.

1 Ответ

0 голосов
/ 06 марта 2019

Поскольку метод save() возвращает логическое значение, вы можете написать его так:

$user->notificationSetting()
    ->save(
        $notificationSetting = new NotificationSetting([
            'user_id' => $user_id, 
            'notification_type_id' => 121
        ])
    );

return $notificationSetting;

Вместо этого вы также можете использовать метод create(), который будет возвращать экземпляр модели, но только если атрибуты, конечно, могут быть заполнены.

Если вы хотите получить все связанные записи модели в любое время, вы можете использовать метод load(), например:

$user->load('notificationSetting');

Также важно использовать форму множественного числа для отношения hasMany, чтобы отличить его от отношения hasOne или belongsTo:

public function notificationSettings()
{
    return $this->hasMany('App\NotificationSetting');
}
Добро пожаловать на сайт PullRequest, где вы можете задавать вопросы и получать ответы от других членов сообщества.
...