簡體   English   中英

Laravel 的所屬關系不返回值

[英]Laravel belongsTo relationship not returning values

我試圖運行一個 hasMany,但我真的不知道為什么我沒有得到任何結果! 兩個表:公司,工作訂單,每個工作訂單都有一個公司名稱和地址,我想在laravel中使用belongsTo關系

<?php
namespace App;

class Company extends Model
{
    protected $table      = 'company';
    protected $primaryKey = 'company_id';

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

我的工作訂單頁面

<?php
namespace App;

class Joborder extends Model
{
    protected $table      = "joborder";
    public    $primaryKey = "joborder_id";
    protected $dates      = [
        'start_date',
        'created_at',
        'updated_at'
    ];

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

這是頁面控制器:

public function joblist() {
    $joblist     = Joborder::all();
    $newInstance = new Joborder;
    $company     = $newInstance->company();

    dd($company->name);
    dd($joblist);

    return view('pages.joblist')->with('jobs',$joblist);
} 

這是我的頁面運行后的 dd

BelongsTo {#217 ▼
  #foreignKey: "company_id"
  #otherKey: "company_id"
  #relation: "company"
  #query: Builder {#218 ▶}
  #parent: Joborder {#205 ▼
    #table: "joborder"
    +primaryKey: "joborder_id"
    #dates: array:3 [▼
      0 => "start_date"
      1 => "created_at"
      2 => "updated_at"
    ]
    #guarded: array:1 [▼
      0 => "id"
    ]
    #fillable: []
    #connection: null
    #keyType: "int"
    #perPage: 15
    +incrementing: true
    +timestamps: true
    #attributes: []
    #original: []
    #relations: []
    #hidden: []
    #visible: []
    #appends: []
    #dateFormat: null
    #casts: []
    #touches: []
    #observables: []
    #with: []
    #morphClass: null
    +exists: false
    +wasRecentlyCreated: false
  }
  #related: Company {#212 ▼
    #table: "company"
    #primaryKey: "company_id"
    #guarded: array:1 [▼
      0 => "id"
    ]
    #fillable: []
    #connection: null
    #keyType: "int"
    #perPage: 15
    +incrementing: true
    +timestamps: true
    #attributes: []
    #original: []
    #relations: []
    #hidden: []
    #visible: []
    #appends: []
    #dates: []
    #dateFormat: null
    #casts: []
    #touches: []
    #observables: []
    #with: []
    #morphClass: null
    +exists: false
    +wasRecentlyCreated: false
  }
}

我在公司中有 company_id 作為 pkey,在 joborder 中有作為 fkey 感謝您的幫助!

你應該打電話

$company = $newInstance->company()->get();

代替

$company = $newInstance->company();

PageController:jobList
現在,您正在通過而不是相關數據來恢復關系本身。

或者,您可以將company作為屬性訪問,該屬性應自動返回相關數據而不是關系本身:

$company = $newInstance->company;

您需要在兩個關系中同時指定foreignKeylocalKey ,因為您沒有 id 作為主鍵

公司模式

public function jobs() {
     return $this->hasMany('App\Joborder','company_id','company_id');
}

訂單模型

public function company(){
     return $this->belongsTo('App\Company', 'company_id', 'company_id');
}

現在像這樣獲取它

public function joblist() {
    $joblist = Joborder::with('company')->all();

    dd($joblist);

    return view('pages.joblist')->with($joblist);
} 

如果您需要獲取公司的選定字段,則可以在預先加載$query->select('name', 'address');指定它$query->select('name', 'address');

public function joblist() {
    $joblist = Joborder::with(['company' => function($query){
                         $query->select('name', 'address');
               }])->get();

    return view('pages.joblist')->with($joblist);
} 

在刀片中,您可以像這樣訪問公司數據

@foreach($joblist as $job)
   @if($job->company)
      {{$job->company->name}}
      {{$job->company->address}}
   @endif
@endforeach

嘗試這樣的事情

public function joblist() {
    $joblist = Joborder::with('company')->get();         
    return view('pages.joblist')->with('jobs',$joblist);
}

確保公司表中有工作列表的 id。 還要檢查外鍵名稱,否則您必須傳遞joborder_id或任何外鍵名稱:

public function company(){
    return $this->belongsTo('App\Company', 'joborder_id');
}

暫無
暫無

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

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