我在这里浏览了多个示例和以前的文章,但是找不到我做错的事情。我有两个桌子:
用户
id username
1 test1
2 test2
3 test3
得分表
id user_id points
1 1 52
2 2 62
3 3 12
现在我想获得所有分数并将user_id替换为实际的用户名。这是我的代码:
ScoresController
<?php
namespace App\Http\Controllers;
use Illuminate\Http\Request;
use App\Score;
use App\Http\Resources\Score as ScoreResource;
class ScoresController extends Controller
{
public function index()
{
$scores = Score::with('user')->paginate(4);
return ScoreResource::collection($scores);
}
}
Score.php
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
use App\User;
class Score extends Model
{
public function user(){
return $this->belongsTo(User::class,'user_id');
}
}
用户
<?php
namespace App;
use Laravel\Passport\HasApiTokens;
use Illuminate\Notifications\Notifiable;
use Illuminate\Contracts\Auth\MustVerifyEmail;
use Illuminate\Foundation\Auth\User as Authenticatable;
use App\Score;
class User extends Authenticatable
{
use HasApiTokens, Notifiable;
protected $fillable = [
'username', 'email', 'password', 'avatar'
];
protected $hidden = [
'password', 'remember_token',
];
public function scores(){
return $this->hasMany(Score::class,'user_id');
}
}
得分资源
<?php
namespace App\Http\Resources;
use Illuminate\Http\Resources\Json\JsonResource;
class Score extends JsonResource
{
public function toArray($request)
{
return [
'username' => $this->user_id,
'points' => $this->points,
];
}
}
目前我正在显示user_id和积分,我尝试过
$this->username OR $this->user-id->username
但是它们都不起作用,我知道我可以使用数据库或原始SQL,但我想这样做
答案 0 :(得分:1)
阅读:https://laravel.com/docs/5.7/eloquent-relationships
foreach ($scores as $score) {
echo $score->user->username;
}
或者在Blade中:
@foreach ($score as $score)
<p>{{ $score->user->username }}</p>
@endforeach
您必须首先访问“属性”,即您定义的用于处理关系的函数的名称。您的情况是user
。
之后,将返回该用户的User
类,然后您可以在其中访问所需的任何属性。