[英]Laravel 5 Eloquent related model return specific fields without ID
我有兩個模型, Fair和Coordinate 。 協調員有很多博覽會。
當從Fair檢索相關的Coordinate時,我只想返回經度和緯度 ,沒有時間戳或ID。
當我運行$fairs = Fair::with('coordinates')->get();
坐標關系為Null 。
如果我在Fair模型中更改belongsTo
的select
方法以return $this->belongsTo('App\\Coordinate', 'coordinate_id')->select(array('id', 'longitude', 'latitude'));
響應是正確的,但是它包含ID。
"coordinates":{
"id": 1,
"longitude":"-25.704571",
"latitude":"59.145973"
},
有沒有一種方法可以使用select方法而不包含ID?
我發現是否還要添加protected $hidden = ['id'];
對坐標模型,我想要的響應是正確的。
"coordinates":{
"longitude":"-25.704571",
"latitude":"59.145973"
},
這似乎不是正確的方法。
公平:
namespace App;
use Illuminate\Database\Eloquent\Model;
class Fair extends Model
{
protected $dateFormat = 'c';
public function coordinates()
{
return $this->belongsTo('App\Coordinate', 'coordinate_id')->select(array('longitude', 'latitude'));
}
}
坐標:
<?php
namespace App;
use Illuminate\Database\Eloquent\Model;
class Coordinate extends Model
{
protected $fillable = ['longitude', 'latitude'];
public function fairs()
{
return $this->hasMany('App\Fair');
}
}
您可以使用:1。
$fairs = (new Fair)->get();
foreach($fairs as $fair){
echo $fair->coordinates->longitude;
}
和2。
$fairs = (new Fair)->with('coordinates')->get();
foreach($fairs as $fair){
echo $fair->coordinates->longitude;
}
區別在於2.案例使用急切加載(查詢優化)的更多信息: http : //laravel.com/docs/5.1/eloquent-relationships#eager-loading
Laravel默認不連接(執行連接查詢),當您引用連接數據(例如“ $ fair-> coordinates->經度”)時,它會連接(執行連接查詢)。
您可以使用閉包來選擇需要加載的列,並通過addSelect
方法來加載它們:
$posts = Fair::with(array('coordinates' => function($query)
{
$query->addSelect(array('longitude', 'latitude'));
}))->get();
這樣,您不必從結果中永久隱藏id
列,而只需要針對特定查詢即可。
如果您只想在一個查詢中完成所有操作,則可以加入並選擇
$data = Fair::query()
->join('coordinates','coordinates.id','=','fairs.coordinate_id')
->get(['fairs.*','coordinates.latitude','coordinates.longitude'])
如果您使用緊急加載,那么別無選擇,只能獲取id,因為那就是雄辯地映射結果的方式,因此結果將只是Fair屬性的一部分。
聲明:本站的技術帖子網頁,遵循CC BY-SA 4.0協議,如果您需要轉載,請注明本站網址或者原文地址。任何問題請咨詢:yoyou2525@163.com.