Наверное, глупая ошибка, но я учусь. Я попытался создать системное сообщение, и у меня возникли проблемы, потому что у меня много и много сообщений с пользователями моделей ussers:

class User extends Authenticatable
{
    use Notifiable;


    protected $fillable = [
        'name', 'email', 'password',
    ];

    protected $hidden = [
        'password', 'remember_token',
    ];

    public function items(){
        return $this->hasMany('App\Item');
    }

    public function messages(){
        return $this->hasMany('App\Message');
    }
}

Сообщение модели:

class Message extends Model
{
    protected $fillable = [
        'id_user_to_send',
        'id_user_from',
        'text',
        'title'
    ];

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

Функция в MessagesController

 public function mymessages()
{

    $user= Auth::user()->id;
    $messages = Message::latest()->where('id_user_to_send',$user)->orWhere('id_user_from',$user)->get();
    return view('messages.inbox', compact('messages', 'user'));
}

Посмотреть:

    @foreach( $messages as $message)
        <tr>
            <td>
                {{ $message->user->name }}</td><td>{{ $message->title }}
            </td>
            <td>
                <button type="button" class="btn btn-primary">Przeczytaj</button>
            </td>
        </tr>
    @endforeach

И ошибка: /

SQLSTATE [42S02]: Базовая таблица или представление не найдены: 1146 Таблица 'wymiana2.message_user' не существует (SQL: выберите пользователей. *, Message_user.message_id как pivot_message_id, message_user.user_id как pivot_user_id из пользователей внутреннего присоединения к message_user для пользователей. id = message_user.user_id, где message_user.message_id = 4) (Просмотр: C: \ wymiana2 \ resources \ views \ messages \ inbox.blade.php)

Schema::create('messages', function (Blueprint $table) {
    $table->increments('id');
    $table->integer('id_user_to_send')->unsigned();
    $table->integer('id_user_from')->unsigned();
    $table->string('text');
    $table->string('title');
    $table->foreign('id_user_to_send')->references('id')->on('users');
    $table->foreign('id_user_from')->references('id')->on('users');
    $table->timestamps();
});

   Schema::create('users', function (Blueprint $table) {
    $table->increments('id');
    $table->string('name');
    $table->string('email')->unique();
    $table->string('password');
    $table->rememberToken();
    $table->timestamps();


});

Я читал документацию и много чего пробовал. Что я делаю не так? Вы можете помочь мне? дать подсказку? Я хотел бы отображать только имя пользователя, я мог бы использовать запрос, но мне все равно нужно исправить эту связь.

Когда у меня есть: User.php

public function messages(){ return $this->belongsToMany('App\Message'); }

Message.php

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

У меня ошибка: попытка получить имя свойства не-объекта (вид: C: \ wymiana2 \ resources \ views \ messages \ inbox.blade.php)

0
Peter 14 Мар 2018 в 13:42

2 ответа

Лучший ответ

Обновить

Поскольку сообщения предназначены только для определенных пользователей, отношение многих ко многим не требуется . Сохранив структуру базы данных (нет необходимости в промежуточной таблице), добавьте следующее отношение к модели Message.

Message.php

class Message extends Model
{
    public function sender()
        {
            return $this->hasOne('App\User', 'id', 'id_user_from');
        }

    public function reciepient()
        {
            return $this->hasOne('App\User', 'id', 'id_user_to_send');
        }
}

User.php

class User extends Model
{
    public function messages()
    {
        return $this->hasMany('App\Message');
    }
}

В вашем контроллере или представлении вы можете получить доступ к сообщениям пользователя с помощью $user->messages();

Отправка пользователю сообщения с помощью $message->sender; и пользователя-получателя с помощью $user->reciepient;

0
iamab.in 14 Мар 2018 в 15:41

Выполните миграцию new для своей таблицы pivot:

Schema::create('message_user', function (Blueprint $table) {
        $table->increments('id');
        $table->bigInteger('message_id')->unsigned();
        $table->integer('user_id')->unsigned();
        $table->timestamps();
});
0
Sohel0415 14 Мар 2018 в 11:12