Laravel 5 如何在laravel中访问我的模型?

Laravel 5 如何在laravel中访问我的模型?,laravel-5,Laravel 5,我似乎不知道这个代码出了什么问题。我在运行拉威尔5.4 错误: 控制器功能: <?php namespace App\Http\Controllers; use Illuminate\Http\Request; use App\Thread; class ThreadController extends Controller { public function show($id) { return Thread::where('id', '=', $i

我似乎不知道这个代码出了什么问题。我在运行拉威尔5.4

错误:

控制器功能:

<?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();
    }


}

我建议添加您的错误代码,而不是现在链接到图像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);
}
这会将消息与线程模型一起加载


希望有帮助

我建议添加错误代码,而不是立即链接到图像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);
}
这会将消息与线程模型一起加载


希望有帮助

关于Joel在评论中的问题

User::find1->messages->create$request->only'body'


没有调用您提到的“messages函数”,也没有返回关系。相反,它调用的是messages属性,这是不同的。

关于Joel在评论中的问题

User::find1->messages->create$request->only'body'


没有调用您提到的“messages函数”,也没有返回关系。相反,它调用的是messages属性,这是不同的。

请在问题正文中添加错误消息/代码。请在问题正文中添加错误消息/代码。如果可以,请继续提问$message=User::find1->messages->create$request->only'body';告诉我一个错误,create不存在。知道为什么吗?用户模型有一个messages函数,它返回一个hasMany关系…@Joel你会想问一个新问题,因为这里的问题太多了。其概念是:不要将create方法链接到查询上。您需要使用firstOrFail或类似方法获取对象,然后您可以使用messages方法保存消息。因此,如果可以的话,请回答一个后续问题$message=User::find1->messages->create$request->only'body';告诉我一个错误,create不存在。知道为什么吗?用户模型有一个messages函数,它返回一个hasMany关系…@Joel你会想问一个新问题,因为这里的问题太多了。其概念是:不要将create方法链接到查询上。您需要使用firstOrFail或类似方法获取对象,然后您可以使用messages方法保存消息。a,true!但是改为messages会产生以下错误:Macroable.php第74行中的BadMethodCallException:MethodCreate不存在。A,true!但更改为messages会产生此错误:Macroable.php第74行中的BadMethodCallException:方法创建不存在。