簡體   English   中英

Laravel 5雄辯的相關模型返回沒有ID的特定字段

[英]Laravel 5 Eloquent related model return specific fields without ID

我有兩個模型, FairCoordinate 協調員有很多博覽會。

當從Fair檢索相關的Coordinate時,我只想返回經度緯度 ,沒有時間戳或ID。

當我運行$fairs = Fair::with('coordinates')->get(); 坐標關系為Null

如果我在Fair模型中更改belongsToselect方法以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.

 
粵ICP備18138465號  © 2020-2024 STACKOOM.COM