【问题标题】:Call to undefined method with Eloquent in Laravel5.1在 Laravel5.1 中使用 Eloquent 调用未定义的方法
【发布时间】:2015-10-09 20:26:31
【问题描述】:

我正在使用 Laravel 5.1 并遇到错误

调用未定义的方法 Illuminate\Database\Eloquent\Collection::votes()

存储数据时。

商业模式

namespace App\Models;

use Illuminate\Database\Eloquent\Model;

class Business extends Model
{
public function votes()
    {
        return $this->hasMany('App\Models\Vote');
    }
}

然后表单POST请求到

$business = Business::where('business_area', $request->input('business_area'))->get();

        $vote = $business->votes()->create($request->all());

        return response()->json($vote, 201);

由于某种原因,它找不到投票方法。我被卡住了。

【问题讨论】:

    标签: php eloquent laravel-5.1


    【解决方案1】:

    确保模型已加载。

    <?php
    
    namespace App;
    
    use Illuminate\Database\Eloquent\Model;
    
    class Post extends Model
    {
        /**
         * Get the comments for the blog post.
         */
        public function comments()
        {
            return $this->hasMany('App\Comment');
        }
    }
    

    请记住,Eloquent 会自动确定 Comment 模型上正确的外键列。按照惯例,Eloquent 将使用拥有模型的“snake case”名称并以_id 为后缀。因此,对于这个例子,Eloquent 会假设 Comment model 的外键是 post_id

    HasMany In Laravel

    【讨论】:

    • 谢谢。我已经用模型中的其余代码更新了我的问题。看起来命名空间只有一处不同。
    【解决方案2】:

    您可以对模型的单个实例而不是集合进行投票。所以首先对 $business 进行 foreach,然后对单个实例进行投票。

    【讨论】:

    • 谢谢!因此,在我看来,我每个人都需要两个,首先是为了业务,然后是在那个内部进行投票?只是确保我理解正确。
    • 确实,因为您检索了业务集合,然后在业务实例上调用投票将获得您的投票集合,所以再次 foreach :)
    • 谢谢,我马上试试。
    猜你喜欢
    • 1970-01-01
    • 2021-10-18
    • 2015-12-20
    • 2019-09-29
    • 2020-10-17
    • 1970-01-01
    • 1970-01-01
    • 1970-01-01
    • 2021-03-12
    相关资源
    最近更新 更多