Сохранение отношений в Laravel на ходу - PullRequest
0 голосов
/ 27 сентября 2019

У меня есть пользовательская модель, связанная с моделью конечного пользователя с отношением hasOne.Я хочу сохранить входные данные поля формы в пользовательской и конечной модели за один раз.вот мой код;

    $user = new User();
    $user->first_name = $request->first_name;
    $user->last_name = $request->last_name;
    $user->phone_number = $request->phone_number;
    $user->email = $request->email;
    $user->password = $request->password;
    $user->enduser->username = $request->username;
    $user->save();

    return user;

мои отношения

Class User extends Authenticable
{
       public function enduser()
       {
         return $this->hasOne('App\Enduser');
       }
}

моя миграция для пользователей, таким образом,

    public function up()
{
    Schema::create('users', function (Blueprint $table) {
        $table->increments('id');
        $table->string('first_name');
        $table->string('last_name');
        $table->string('phone_number');
        $table->string('email')->unique();
        $table->timestamp('email_verified_at')->nullable();
        $table->string('password');
        $table->enum('roles',['admin', 'enduser', 'organization', 'radio', 'employee'])->nullable();


        $table->rememberToken();
        $table->timestamps();


    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('users');
}

, а для конечного пользователя, таким образом,

    public function up()
{
    Schema::create('endusers', function (Blueprint $table) {
        $table->increments('id');
        $table->text('address')->nullable();
        $table->string('lga')->nullable();
        $table->string('city')->nullable();
        $table->string('state')->nullable();
        $table->string('username');

        $table->integer('user_id')->unsigned();
        $table->foreign('user_id')->references('id')->on('users')->onDelete('cascade')->onUpdate('cascade');

        $table->timestamps();
    });
}

/**
 * Reverse the migrations.
 *
 * @return void
 */
public function down()
{
    Schema::dropIfExists('endusers');
}

Я получаю сообщение об ошибке «неизвестный столбец« имя пользователя »в предложении« где ».Как я могу сохранить такие отношения?

Ответы [ 3 ]

1 голос
/ 27 сентября 2019

Ваша пользовательская модель должна выглядеть следующим образом.

User.php

<?php

namespace App;

use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;

class User extends Authenticatable
{
    use Notifiable;

    protected $fillable = [
        'first_name','last_name','phone', 'email', 'password',
    ];


    public function enduser() {
        return $this->hasOne('App\EndUser');
    }
}

и ваша модель EndUser должна выглядеть следующим образом

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class EndUser extends Model
{
    use Notifiable;

    protected $fillable = [
        'username',
    ];


    public function user() {
        return $this->belongsTo('App\User');
    }
}

Тогда вы можете написатьэтот код в вашем контроллере

//first becrypt your password
$request->merge('password',bcrypt($request->password));

$user = User::create(
    $request->only(['first_name','last_name','phone','email','password'])
);

$user->enduser->create([$request->username]);

return $user;
1 голос
/ 27 сентября 2019

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

$user = new User();
$user->first_name = $request->first_name;
$user->last_name = $request->last_name;
$user->phone_number = $request->phone_number;
$user->email = $request->email;
$user->password = $request->password;
$user->save();

$endUser = new EndUser();
$endUser->username = $request->username;
$user->enduser()->save($endUser);

return $user;

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

0 голосов
/ 27 сентября 2019

Может быть, вы сможете решить ее, используя наблюдатели laravel :

php artisan make:observer UserObserver --model User

Эта команда создаст файл UserObserver.php внутри папки app/Observers.

Добавьте этодля функции created:

public function created(User $user)
{
    EndUser::create([
        'username' => $user->username,
        'user_id'  => $user->id,
    ]);
}

Вам также необходимо отредактировать файл AppServiceProvider внутри папки app/Providers.Добавьте это к методу boot:

public function boot()
{
    User::observe(UserObserver::class);
}

Теперь, каждый раз, когда User регистрируется, он создает EndUser с пользовательскими данными.

Надеюсь, этопомогает.

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