与2行和用户ID的关系

时间:2017-07-05 20:03:11

标签: php mysql laravel

所以我想做的就是这个,基本上我有一个叫做游戏的桌子

creator_idguest_id

现在我想要做的是当我想要列出我想加入两张桌子的所有游戏时,例如creator_id是约翰而guest_id是玛丽

我想列出所有"游戏"用他们的名字

  

ID:322 |创作者姓名:John |嘉宾姓名:玛丽

等等,这是我到目前为止所得到的:

控制器:

class AdminController extends Controller
{
    public function index()
    {
        return view('admin.home');
    }

    public function listGames()
    {
        $games = Game::get();
        return view('admin.games.list', compact('games'));
    }
}

查看:

@extends('admin.content')

@section('title', 'List games')

@section('content')

<table class="table table-hover">

@foreach($games as $game)

// now i want to list that here

@endforeach
</table>

@endsection

后来我将其添加到游戏模型

public function creator() {
    return $this->hasOne(User::class, 'creator_id');
}

public function guest() {
    return $this->hasOne(User::class, 'guest_id');
}

这到控制器

public function index() {
    $games = Game::with('creator', 'guest')->get();
    return view('admin.games.list', compact('games'));
}

并像这样循环

@foreach($games as $game)
    Creator: {{ $game->creator->name }}
    Guest: {{ $game->guest->name }}
@endforeach

然后发生了这个

SQLSTATE [42S22]:未找到列:1054未知列&#39; users.creator_id&#39;在&#39; where子句&#39; (SQL:select * from users where users.creator_id in(14,15,16)和users.deleted_at为null),我不知道为什么但是我没有在users表中创建createor_id和guest_id,它在游戏表中

2 个答案:

答案 0 :(得分:0)

尝试将游戏模型的关系更改为:

public function creator() {
    return $this->belongsTo(User::class, 'creator_id');
}

public function guest() {
    return $this->belongsTo(User::class, 'guest_id');
}

答案 1 :(得分:0)

你让孩子和父模型混淆了。游戏不会拥有用户 - 他们belongTo()他们,因为游戏表中包含父母的ID。

反过来说,除非每个用户只能创建或玩一个游戏,否则你应该使用hasMany()而不是hasOne()