如何通过雄辩的关系获取数据

时间:2019-04-16 09:04:45

标签: php laravel

我得到了这种形式,您可以在其中选择一个客户端,并将client_id插入数据库中

<div class="form-group">
    <label for="clientId">Client</label>
    <select name="client_id" class="form-control">
        @foreach($clients as $client)
            <option value="{{$client->client_id}}">
                {{$client->client_name}}
            </option>
        @endforeach 
    </select>
</div>

<div class="form-group">
    <button type="submit" class="btn btn-success">Submit</button>
</div>

我的项目负责人是这个

public function index()
{
    return view('projects.index', [
        'projects' => Project::all(),
        'client' => Client::all(),
    ]);
}

/**
 * Show the form for creating a new resource.
 *
 * @return \Illuminate\Http\Response
 */
public function create()
{
    if (Auth::user()->role != 'admin') {
        return redirect()->back();
    } else {
        return view('projects.create',[
            'project' => new Project,
            'clients' => Client::all(),
        ]);
    }
}

所以我想显示每个项目的client_id中的客户端名称,这是我的索引

<tbody class=""> 
    @foreach ($projects as $project)
        <tr>
            <td>{{ $project->proj_id }}</td>
            <td>{{ $project->proj_title }}</td>
            <td>{{ $project->proj_desc }}</td>
            <td>{{ $project->client->client_name }}</td>
            <td>{{ $project->created_by }}</td>
            <td>{{ $project->created_at }}</td>
            @if (Auth::user()->role == 'admin')
            <td>

客户端模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Client extends Model
{
    protected $primaryKey = 'client_id';

    protected $fillable = ['client_name','client_id'];

    public function projects () {
        return $this->hasMany('App\Project');
    }
}

项目模型:

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Project extends Model
{
    protected $primaryKey = 'proj_id';
    protected $fillable = [
        'proj_title',
        'proj_desc',
        'client_id',
        'created_by'
    ];

    public function clients (){
        return $this->hasOne('App\Client');
    }
}

那么,如何从索引中检索数据?我尝试过像文档中那样,但是总是出现错误。

谢谢。

2 个答案:

答案 0 :(得分:3)

由于客户可以拥有一个/很多项目,因此您应该在项目模型上定义该关系的逆关系。这将变成:一个项目属于一个客户。

在代码中: 项目模型

public function client()
{
    return $this->belongsTo('App\Client');
}

您还可能注意到这种反向关系,因为您将外键( client_id )存储在 projects 表中。 如果您使用has one,Laravel会在相关模型表中查找外部列(在您的示例中为clients)。

注意:在您的视图中,您正在呼叫client->client_name,但已将关系定义为clients(复数)。我将关系重命名为client(单数形式),以更好地描述它

答案 1 :(得分:0)

在您的项目控制器中:

return view('projects.index', [
    'projects' => Project::with('clients')->get(),
]);

您认为:

<td>{{$project->clients->client_name}}</td>

尽管您是hasOne关系,但您在Project模型上将project-> client关系命名为客户。

我还要将project-> client关系定义为BelongsTo,而不是HasOne

相关问题