Laravel - заполнено $ $, все еще получает MassAssignmentException - PullRequest
0 голосов
/ 25 июня 2018

У меня очень специфическая проблема. Я пытаюсь создать новую запись в моей базе данных через Tinker. Всякий раз, когда я бегу App\User::find(1)->message()->create(['message' => 'Hello from Coleigh']); Я получаю исключение MassASsignmentException. Странно то, что я помещаю имя переменной в свое свойство fillable. Я не понимаю, почему я получаю это.

Я гуглил ответы, но как вы можете видеть из моего кода, я добавил поле сообщения в оба заполняемых свойства. Я абсолютно не знаю, почему laravel не распознает поле сообщения.

Вот мои модели

namespace App;

use Illuminate\Database\Eloquent\Model;

    class Message extends Model
    {
        protected $fillable = ['message'];
        public function user() {
            return $this->BelongsTo(User::class);
        }
    }

и

<?php
namespace App;
use Illuminate\Notifications\Notifiable;
use Illuminate\Foundation\Auth\User as Authenticatable;
class User extends Authenticatable
{
    use Notifiable;
    /**
     * The attributes that are mass assignable.
     *
     * @var array
     */
    protected $fillable = [
        'name', 'email', 'password', 'message'
    ];
    /**
     * The attributes that should be hidden for arrays.
     *
     * @var array
     */
    protected $hidden = [
        'password', 'remember_token',
    ];

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

    public function roles() {
        return $this->BelongsToMany('App\Role');
    }

    public function hasRole($name) {
        foreach($this->roles as $role) {
            if ($role->name == $name) {
                return true;

            }

        }

        return false;

    }

    public function deposits() {
        return $this->hasMnay('App\Deposits');
    }

    public function isBlocked()
    {
        if ($this->banned) {
            return true;
        } else {
            return false;
        }
    }

    public function message() {
        return $this->hasMany(Message::class);
    }


}

Ответы [ 3 ]

0 голосов
/ 25 июня 2018

В сообщении класса вы должны добавить еще один столбец в свойство $ fillable.

protected $fillable = ['user_id', 'message'];
0 голосов
/ 25 июня 2018

Кажется, вы пропустили user_id в сообщении $fillable. https://laravel.com/docs/5.6/eloquent#mass-assignment

0 голосов
/ 25 июня 2018

использование save

$user = App\User::find(1);

$comment = new App\Message(['message' => 'Hello from Coleigh']);

$user->message()->save($comment);

В противном случае с помощью create вам необходимо установить идентификатор отношения.

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