繁体   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