laravel-5 - 调用未定义的方法 Illuminate\Database\Eloquent\Collection

标签 laravel-5 eloquent

我有这两个模型:

class Opcion extends Model
{

    protected $table = 'opciones';

    public function pregunta(){ 
        return $this->belongsTo('Send\Pregunta', 'pregunta_id');
    }
}

class Pregunta extends Model
{

    protected $table = 'preguntas';

    public function opciones(){ 
        return $this->hasMany('Send\Opcion', 'pregunta_id');
    }
}

然后在我的 Controller 中:

 class GraficosController extends Controller
{
    public function getIndex(){
        $preguntas= \Send\Pregunta::where('encuesta_id','=',1)->get();
        $opciones= $preguntas->opciones();


        return view('graficos.grafico')->with(['preguntas'=>$preguntas,'opciones'=>$opciones]);
    }
}

我收到此错误:调用未定义的方法 Illuminate\Database\Eloquent\Collection::opciones(),我试图获取与“preguntas”相关的所有“opciones”

最佳答案

您收到此错误是因为 get() 方法返回一个 Collection 对象,您可以将其视为结果数组。因此,查询返回的第一个元素将是 $preguntas[0],您可以这样做:

$opciones= $preguntas[0]->opciones();

但是,如果您知道只会从查询中获得一个结果,那么您应该使用 first() 方法而不是 get()first()将返回查询的第一个结果的实例。

$preguntas= \Send\Pregunta::where('encuesta_id','=',1)->first();
$opciones= $preguntas->opciones(); // Now this will work

关于laravel-5 - 调用未定义的方法 Illuminate\Database\Eloquent\Collection,我们在Stack Overflow上找到一个类似的问题: https://stackoverflow.com/questions/32077571/

相关文章:

php - 尝试升级到 Laravel 5.3,但我一直看到错误 `Call to undefined method Illuminate\Auth\Access\Gate::abilities()`

php - Laravel Eloquent 查询

php - Eloquent - 更新集合中的所有模型

laravel - 条件表连接

Laravel 从派生表中选择

laravel - 为什么策略能力方法不会被调用?

mysql - 如何从堆栈中的2个表中提取数据

php - 在 Laravel 5.4.36 中使用模型搜索数据

php - Laravel collectivehtml 安全路由或 url

php - 如何使 Laravel Eloquent "IN"查询?