【问题标题】:BadMethodCallException in Builder.php line 2405: Call to undefined method Illuminate\Database\Query\Builder::answers()Builder.php 第 2405 行中的 BadMethodCallException:调用未定义的方法 Illuminate\Database\Query\Builder::answers()
【发布时间】:2019-07-13 22:24:02
【问题描述】:
public function productFaq() {
    return $this->hasMany('App\Models\ProductFaq', 'product_id');
}
public function answers(){
    return $this->hasMany('App\Models\ProductFaqAnswers','faq_id');
}

'productFaq' => function($faq){
    $faq->selectRaw('faq_id,user_id,user_name,product_id,product_name, date_of_enquiry,published,question')
        ->with(['answers' => function($answers)
        {
            $answers->select(['faq_id','answer','user_name','date_of_answer'])
            ->where('published','=',1);
        }
    ]);         
 },

【问题讨论】:

  • 你能展示完整的声明吗?
  • 请出示您的完整代码,这是不可读的。
  • 在代码中的某处,您直接在构建器上执行->answers(),而不使用->get()first()。发布相关代码是获得所需答案的最佳选择
  • 感谢您的关注问题已得到解决
  • 问题是我忘记在引用的模型文件中声明以下函数: public function answers(){ return $this->hasMany('App\Models\ProductFaqAnswers','faq_id'); }

标签: php mysql laravel web


【解决方案1】:

您只能在模型上调用 with 方法,而不是在 querybuilder 上,因此它应该是第一条语句,因为当您可以 selectRaw 时,它将返回一个新的 querybuilder 实例:

$faq->with(['answers' => function($answers) {
    $answers
        ->select(['faq_id','answer','user_name','date_of_answer'])
        ->where('published','=',1);
 }])
 ->selectRaw('faq_id,user_id,user_name,product_id,product_name,
date_of_enquiry,published,question')->get();

【讨论】:

    猜你喜欢
    • 1970-01-01
    • 2016-12-21
    • 2019-12-12
    • 2017-01-27
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2016-04-10
    • 2019-10-20
    相关资源
    最近更新 更多