我有这两个模型:
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/