尝试从一对多关系检索数据时获取空数组Laravel

时间:2020-05-22 12:07:12

标签: php laravel laravel-6

我正在一个允许学生搜索并获得房屋的平台上工作。我正在尝试实现一项功能,该功能允许学生根据代理发布的内容对代理进行评分,以减少和缓解平台上的欺诈行为。即使我在User(agent)和AgentRating之间建立了一对多关系,当我尝试检索座席评级时,我仍然为空。

AgentRating.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class AgentRating extends Model
{
    //
     public function user(){
        return $this->belongsTo(User::class);
    }
}

User.php

class User extends Model
{
     public function ratings(){
        return $this->hasMany(AgentRating::class);
    }
}

AgentRatingController.php

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;
use App\User;
use App\AgentRating;
use App\Http\Traits\AuthUserTrait;
use DB;


class AgentRatingController extends Controller
{
    //
    use AuthUserTrait;

    public function __construct(){
        $this->middleware(['jwt.auth', 'forceJson'], ['only' => ['store']]);
    }


    public function store(Request $request, $id){
        $this->validate($request, [
            "rating" => 'required'
        ]);

        $rating = new AgentRating;
        $user = User::find($id);
        $rating->user_id = $this->authUser()->id;
        $rating->agent_id = $user->id;
        $rating->rating = $request['rating'];
        $rating->save();
        dd($user->ratings); // This returns an empty array even though there is a rating saved to the DB.

    }
}

1 个答案:

答案 0 :(得分:0)

我认为您的AgentRatingController中有错字。

$rating->agent_id = $user->id;行似乎有误。

$rating_id应该是自动递增的并且不能填充。不是吗?

此外,我建议您在编程时遵循PSR-12标准。 我的意思是,声明属性类型,返回值的函数以及诸如以下的空格:

public function store(AgentRatingRequest $request, int $id): void
{
    AgentRating::create([
        'user_id' => auth()->id(),
        'rating' => $request['rating'],
    ]);

    dd($user->ratings);
}