Я не могу понять, что не так с этим кодом. Я бегу Laravel 5.4.

Ошибка: https: // www. dropbox.com/s/64ioxdf4mv6ps1w/Screenshot%202017-02-28%2020.11.33.png?dl=0

Функция контроллера:

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\Thread;


class ThreadController extends Controller
{

    public function show($id) {

        return Thread::where('id', '=', $id)->messages();
    }
}

Модель:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Thread extends Model
{
    public function messages()  
    {
        return $this->hasMany(Message::class)->get();
    }


}
1
Joel 28 Фев 2017 в 22:15

2 ответа

Лучший ответ

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

Несмотря на это, метод messages определяет отношение и, как таковой, является экземпляром построителя запросов. Вместо того чтобы связывать метод get там, я предлагаю немного другой подход:

В вашем контроллере

public function show($id)
{
    // Use first() instead of get() since you're returning a
    // specific model by its primary key (I assume)
    return Thread::where('id', $id)->with('messages')->first();
}

И в твоей модели

public function messages()
{
    // This returns a query builder instance, which is what you want.
    // It defines the relationship between Thread and Message
    return $this->hasMany(Message::class);
}

Это будет eager load вашими сообщениями вместе с вашей Thread моделью.

Надеюсь, это поможет!

3
camelCase 28 Фев 2017 в 19:36

Относительно вопроса Джоэла в комментариях ...

Пользователь :: находкой ( 1 ) - > messages- > создать ( $ request- > только ( ' тело '));

Не вызывает «функцию сообщений», которую вы упомянули, и не возвращает отношения. Вместо этого он вызывает свойство сообщений, что является чем-то другим.

1
redcenter 1 Мар 2017 в 13:34