首页 文章

Laravel属于关系不返回值

提问于
浏览
1

我试图运行hasMany但我真的不知道为什么我得不到任何结果!两个表:公司,Joborder,每个工作订单都有一个公司名称和地址,我希望在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');
    }

    }

这是PageController:

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和工作顺序作为fkey感谢您的帮助!

3 回答

  • 3

    你应该打电话

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

    代替

    $company = $newInstance->company();
    

    PageController:jobList .
    现在你不是通过相关数据来回归关系本身 .

    或者,您可以访问 company 作为属性,该属性应自动返回相关数据而不是关系本身:

    $company = $newInstance->company;
    
  • 0

    您需要在两个关系中同时指定 foreignKeylocalKey ,因为您没有id作为主键

    公司模式

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

    Joborder模型

    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');

    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
    
  • 1

    尝试这样的事情

    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');
    }
    

相关问题