我有两个表queries
和query_feedback_types
,查询表有一个外键为query_feedback_type_id
,我分别为Query.php
和{{ 1}}都在我的QueryFeedbackType.php
文件夹中。
所以我的问题是,当我尝试在这两个表之间建立一种雄辩的关系,并借助模型Query从Queries表返回所有数据时,我也想拥有query_feedback_types表的数据,但是我无法通过App\Admin
访问它,这给我一个
“无法使静态方法Illuminate \ Database \ Eloquent \ Model :: query() App \ Admin \ QueryFeedbackType类中为非静态”
我已经创建了一个类似的关系,但是数据库中的表名非常简单,常见问题和类别,常见问题中的外键为category_id。
这种关系运转得很好
模型Query.php
$row->queryFeedbackType->query
模型QueryFeedbackType
namespace App\Admin;
use DB;
use Illuminate\Database\Eloquent\Model;
class Query extends Model
{
public function queryFeedbackType()
{
return $this->belongsTo('App\Admin\QueryFeedbackType');
}
protected $fillable=
['name','email_id','mobile_no','query_feedback_type_id','remark'];
}
控制器QueryController.php
<?php
namespace App\Admin;
use DB;
use Illuminate\Database\Eloquent\Model;
class QueryFeedbackType extends Model
{
public function query()
{
return $this->hasMany('App\Admin\Query');
}
}
我的编码页
use DB;
use validator;
use File;
use App\Http\Controllers\Admin\Resize_Image;
use Helper;
class QueryController extends Controller
{
/**
* Display a listing of the resource.
*
* @return \Illuminate\Http\Response
*/
public function index()
{
$data['page'] = 'View Feedback/Query';
$data['template'] = 'admin/query/view';
$data['results'] = Query::orderBy('id', 'desc')->get();
return view('admin/includes/page', compact('data'));
}
}
错误:
“无法使静态方法Illuminate \ Database \ Eloquent \ Model :: query()非 App \ Admin \ QueryFeedbackType类中的静态”
请向我解释我在这里犯的错误。
答案 0 :(得分:0)
在您扩展的Model类中已经存在一个按名称查询的静态方法,并且在您的类中,您正在使用具有相同名称的非静态方法,这就是为什么您会因错误而更改该方法的名称。
答案 1 :(得分:0)
该模型正在扩展\Illuminate\Database\Eloquent\Model
,该模型已经包含静态查询功能:
/**
* Begin querying the model.
*
* @return \Illuminate\Database\Eloquent\Builder
*/
public static function query()
{
return (new static)->newQuery();
}
对于幕后的每一个雄辩的查询,ORM都会尝试静态地调用此查询方法,即使您不这样做也是如此。在内部发生实例化模型的查询生成器。就像在模型中一样,您有一个名称为query
的方法,这是一个非静态方法。这就是您收到此错误的原因。
在您的情况下,我认为query()
函数不过是一个简单的关系。我建议将其重命名为queries
之类的,因为它具有hasMany。它还将帮助您消除函数名称与默认静态函数query
的重叠。