![](/img/trans.png)
[英]How to get related data from two tables while there are two Foreign keys related to One Primary key in Laravel Framework
[英]How to get all data from two related tables in Laravel [one to many]
我在Laravel中很陌生,需要编写一个简单的后端API。 我做错了什么,我不知道怎么办,因为我从Suppliers表和空数组付款中获得了一些数据:[] 。
我正在尝试从两个相关的表中获取所有数据-付款和供应商。 PAYMENTS表中的SUPPLIERS_ID与SUPPLIERS中的ID有一对多的关系。 在这里,我给您一个图形表示:
这是我的代码:
Suppliers.php模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Suppliers extends Model
{
public function payments()
{
return $this->hasMany('App\Payments');
}
}
Payments.php模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Payments extends Model
{
public function suppliers()
{
return $this->hasOne('App\Suppliers');
}
}
PaymentsController.php
use App\Payments;
use App\Suppliers;
use Illuminate\Http\Request;
use Illuminate\Http\Response;
class PaymentsController extends Controller
{
public function index()
{
$payments = Suppliers::with('payments')->get();
return response($payments, Response::HTTP_OK);
}
}
我得到以下的回答:
[{"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');
}
}
这是供应商的付款
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Suppliers extends Model
{
public function payments()
{
return $this->hasMany('App\Payments','suppliers_ID','id');
}
}
另外,请确保ID在输出中可见(如果ID被隐藏,则laravel无法处理该关系)。 如果要使用hasOne
还可以在关系上指定键
编辑:在关系中添加键名称,您的fk命名为capslock
像贝尔一样改变你的关系
Suppliers.php模型
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Suppliers extends Model
{
public function payments()
{
return $this->hasMany(App\Payments::class, 'suppliers_ID', 'id');
}
}
Payments.php模型
<?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');
}
您可以直接从Laravel文档中了解有关雄辩关系的更多信息,以更好地理解。 https://laravel.com/docs/5.7/eloquent-relationships#one-to-many
让我知道您是否仍然遇到相同的错误。
声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.