Php 如何从Laravel中的两个相关表中获取所有数据[一对多]

Php 如何从Laravel中的两个相关表中获取所有数据[一对多],php,laravel,Php,Laravel,我在Laravel是个新手,需要编写一个简单的后端API。 我做错了,我不知道是什么,因为我从供应商表和空数组中获取了一些数据:[] 我试图从两个相关的表格中获取所有数据-付款和供应商。 这是一种一对多关系,付款表中的供应商ID与供应商中的ID相连接。在这里,我给您一个图形表示: 这是我的密码: Suppliers.php模型 我得到以下答案: [{"id":1,"name":"Ekonaft","adress":"33-100 Tarnow ","email":"ekonaft@gmail.

我在Laravel是个新手,需要编写一个简单的后端API。 我做错了,我不知道是什么,因为我从供应商表和空数组中获取了一些数据:[]

我试图从两个相关的表格中获取所有数据-付款和供应商。 这是一种一对多关系,付款表中的供应商ID与供应商中的ID相连接。在这里,我给您一个图形表示:

这是我的密码:

Suppliers.php模型

我得到以下答案:

[{"id":1,"name":"Ekonaft","adress":"33-100 Tarnow ","email":"ekonaft@gmail.com","payments":[]}, 
{"id":2,"name":"Orlen","adress":"Ares testowy","email":"email@email.pl","payments":[]}]

我做错了什么,在每个对象的末尾得到了空数组付款:[]?

尝试付款的反向关系

belongsTo = has a foreign key to another table
举出一个例子

这是您可以通过付款访问供应商的方式

<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Payments extends Model
{
   public function suppliers()
   {
      return $this->belongsTo('App\Suppliers'); 
  }
}

像贝尔一样改变你的关系

Suppliers.php模型


由于未匹配表关系键名称,您将获得付款的空数组:[

Please, make few changes in both relational function.

public function payments() 
{

    //return $this->hasMany('App\Model', 'foreign_key', 'local_key');
    return $this->hasMany('App\Payments', 'suppliers_id'); 

}

public function suppliers()
{

    //return $this->belongsTo('App\Model', 'foreign_key', 'other_key');
    return $this->belongsTo('App\Suppliers', 'suppliers_id'); 

}
为了更好地理解,您可以直接从Laravel文档中了解更多关于雄辩关系的信息


如果仍然出现相同的错误,请告诉我。

现在,它工作正常。谢谢。但是你能帮我修改一下我的密码吗?我想得到一点不同的结果。现在我有供应商和付款的所有记录。如何从付款中读取所有记录并获取供应商名称而不是供应商ID。您的查询将类似于获取一个至少有一笔付款的供应商:$PAYMENTS=SUPPLIERS::whereHas('PAYMENTS')->with('PAYMENTS')->get();要从付款中读取所有记录并获取供应商名称而不是供应商ID,可以使用反向关系$payments=payments::with('suppliers')->get();谢谢!你拯救了我的夜晚。欢迎@obaram
belongsTo = has a foreign key to another table
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Payments extends Model
{
   public function suppliers()
   {
      return $this->belongsTo('App\Suppliers'); 
  }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Suppliers extends Model
{
   public function payments()
   {
      return $this->hasMany('App\Payments','suppliers_ID','id'); 
   }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Suppliers extends Model
{
   public function payments()
   {
      return $this->hasMany(App\Payments::class, 'suppliers_ID', 'id'); 
   }
}
<?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Payments extends Model
{
   public function suppliers()
   {
      return $this->belongsTo(App\Suppliers::class, 'suppliers_ID', 'id'); 
  }
}
Please, make few changes in both relational function.

public function payments() 
{

    //return $this->hasMany('App\Model', 'foreign_key', 'local_key');
    return $this->hasMany('App\Payments', 'suppliers_id'); 

}

public function suppliers()
{

    //return $this->belongsTo('App\Model', 'foreign_key', 'other_key');
    return $this->belongsTo('App\Suppliers', 'suppliers_id'); 

}