我正在使用Laravel 5.3并尝试使用连接从多个表返回数据。
我正在使用以下相关的3个模型/表格,客户,商业和网站:
在Customer.php中:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Customer extends Model
{
public function businesses()
{
return $this->hasMany('App\Business');
}
}
在Business.php中:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Business extends Model
{
public function customer()
{
return $this->belongsTo('App\Customer');
}
public function websites()
{
return $this->hasMany('App\Website');
}
}
在Website.php中:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Website extends Model
{
public function business() {
return $this->belongsTo('App\Business');
}
}
因此,Customer
可以有多个Businesses
,其中可以有多个Websites
。
现在,我正在尝试从({1}},Customer
和Business
中返回(理想情况下)一个Eloquent请求中的某些列。我知道我可以使用简单的预先加载来返回所有表中的所有列:
Website
但是我只想返回某些列并返回一个数组数组,如下所示:
Customer::with('businesses.websites');
即忽略id,外键,created_at时间戳等等。
我一直在尝试使用以下代码(及其变体)实现此目的:
[
0 => {
'first_name' => 'John',
'last_name' => 'Smith,
'email' => 'js@test.com',
'businesses' => [
0 => {
'name' => 'Smith Ltd'
'websites' => [
0 => {
'domain' => 'smithltd',
'tld' => '.co.uk'
}
]
}
]
} ...
]
但这也是我不想要的 Customer::with([
'businesses' => function ($q) {
$q->select('id', 'customer_id')->pluck('name');
},
'businesses.websites' => function ($q) {
$q->select('id', 'business_id')->pluck('domain', 'tld');
}
])->get();
,id
和customer_id
。据我所知,我需要在business_id
查询中添加foreign_key
和primary_key
以使查询正常工作,但有没有办法将其从最终返回的集合中删除?或者有更好的方法来解决这个问题吗?非常感谢任何帮助,非常感谢。
答案 0 :(得分:0)
你可以用商业模式
做一个rray_merge创建新功能
public function getArrayWithCustomerAndWebsites()
{
return array_merge( "customer" => $this->customer(), etc..... );
}
希望对你有所帮助!