簡體   English   中英

如何通過雄辯的關系獲取數據

[英]How to get data through eloquent relation

我得到了這種形式,您可以在其中選擇一個客戶端,並將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');
    }
}

那么,如何從索引中檢索數據? 我嘗試過像文檔中那樣,但是總是出現錯誤。

提前致謝。

由於客戶可以擁有一個/多個項目,因此您應該在項目模型上定義關系的逆關系。 這將變成:一個項目屬於一個客戶。

在代碼中: 項目模型

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

您還會注意到這種反向關系,因為您將外鍵( client_id )存儲在projects表中。 如果你使用has one ,Laravel將尋求在相關模型表(外列clients在你的例子)。

注意:在您的視圖中,您正在調用client->client_name ,但是您將關系定義為clients (復數)。 我將其重命名為client (單數),因為它可以更好地描述它

在您的項目控制器中:

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

您認為:

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

由於您是hasOne關系,所以在Project模型上將project-> client關系命名為客戶。

此外,我將定義作為該項目- >客戶端的關系BelongsTo ,而不是一個HasOne

暫無
暫無

聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM