Подтвердить что ты не робот

Сохранение связанных записей в laravel

У меня есть пользователи, и пользователи принадлежат к дилеру.

После регистрации пользователя я пытаюсь сохранить нового пользователя и новый дилерский центр.

В базе данных пользователя есть столбец dealership_id, который я хочу заполнить идентификатором вновь созданного представительства.

Это мой текущий код в методе хранения UserController.

public function store()
{
    $user = new User();
    $user->email = Input::get('email');
    $user->password = Input::get('password');


    $dealership = new Dealership();
    $dealership->name = Input::get('dealership_name');

    $user->push();
    return "User Saved";

}

Попытка использования $user->push(); Данные пользователя обновляются, но дилерская деятельность не создается или не обновляется.

4b9b3361

Ответ 1

Красноречивый push() сохраняет модель и ее отношения, но сначала вы должны сказать, что вы хотите вовлечь в отношения.

Поскольку ваша пользовательская модель/таблица содержит идентификатор дилера, я предполагаю, что пользователь может принадлежать только одному дилеру, поэтому отношения должны выглядеть так:

Модель пользователя:

public function dealership()
{
  return $this->belongsTo('Dealership');
}

Модель дилера:

public function users()
{
  return $this->hasMany('User');
}

Чтобы сохранить пользователя с точки зрения дилера, вы делаете следующее:

$dealership->users()->save($user);

Чтобы связать дилерство с пользователем, вы делаете это:

$user->dealership()->associate($dealership);
$user->save();

Ответ 2

Пожалуйста, проверьте этот ответ, чтобы увидеть разницу между push() и save()

Вам необходимо будет правильно определить ваши отношения в соответствии с документацией Если это сделано правильно, оно должно работать. Это то, что делает push():

/**
 * Save the model and all of its relationships.
 *
 * @return bool
 */

    public function push()
    {
        if ( ! $this->save()) return false;

        // To sync all of the relationships to the database, we will simply spin through
        // the relationships and save each model via this "push" method, which allows
        // us to recurse into all of these nested relations for the model instance.

        foreach ($this->relations as $models)
        {
            foreach (Collection::make($models) as $model)
            {
                if ( ! $model->push()) return false;
            }
        }

        return true;
    }

В вашем случае у вас есть один (дилерский) принадлежит многим (пользователям)

В модели "Пользователи":

class Users extends Eloquent {

    public function dealership()
    {
        return $this->belongsTo('Dealership');

    }

}

В приведенном выше примере Eloquent будет искать столбец dealership_id в таблице users. В вашей модели дилера:

class Dealership extends Eloquent {

    public function users()
    {
        return $this->hasMany('User');
    }

}

В вашей функции магазина:

 public function store()
    {
        $user = new User();
        $user->email = Input::get('email');
        $user->password = Input::get('password');


        $user->dealership = new Dealership();
        $user->dealership->name = Input::get('dealership_name');

        $user->push();
        return "User Saved";

    }  

Подробнее читайте здесь красноречивые отношения

Также рассмотрите мой ответ здесь

Ответ 3

Используя push на модели User, Laravel в основном рекурсивно вызывает экономию на всех связанных моделях (что в данном случае равно none, так как вы еще не привязали к нему какие-либо другие модели).

Поэтому, чтобы выполнить то, что вы пытаетесь сделать, вы можете сначала создать пользователя, а затем связать с ним дилерскую сеть, выполнив следующие действия:

$user = new User();
$user->email = Input::get('email');
$user->password = Input::get('password');
$user->save();

$dealership = new Dealership();
$dealership->name = Input::get('dealership_name');

$user->dealerships()->save($dealership);
return "User Saved";

Однако, прежде чем делать это, вы должны убедиться, что ваши модели User and Dealership правильно настроили свои отношения:

Модель пользователя:

public function dealership()
{
     return $this->belongsTo('Dealership');
}

Модель дилера:

public function users()
{
    return $this->hasMany('User');
}

Ответ 4

Вот как мне удается это сделать.

В вашем контроллере: (Laravel 5)

use Auth;

$dealership->user = Auth::user()->ref_user->staff_id;