首页 > 解决方案 > 尝试从一对多关系 Laravel 检索数据时获取空数组

问题描述

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

AgentRating.php

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

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

用户.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.

    }
}

标签: phplaravellaravel-6

解决方案


我认为您的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);
}

推荐阅读