0

こんにちは、私は Laravel を初めて使用し、Laravel Lumen で RESTFul api を作成しようとしています。laravel と Lumen をインストールしました。バージョンは次のとおりです。

Laravel Framework version Lumen (5.2.6) (Laravel Components 5.2.*)

さらに、DB 列名をマッピングするためにhttps://github.com/jarektkaczyk/eloquenceをインストールしました。

連絡先モデル

namespace App;
use Illuminate\Database\Eloquent\Model;
use Sofa\Eloquence\Eloquence; // base trait
use Sofa\Eloquence\Mappable; // extension trait

class Contacts extends Model {
    use Eloquence, Mappable;
    protected $table = 'contacts';
    protected $primaryKey = 'idcontacts';
    protected $visible = ['firstname', 'lastname','idorganization'];
    protected $maps = [
        'firstname'=> 'firstName',
        'lastname' => 'lastName'
    ];

    public function organization() {
        return $this->hasOne('App\Organization','idorganization');
    }
}

組織モデル

namespace App;
use Illuminate\Database\Eloquent\Model;

class Organization extends Model {

    protected $table = 'organization';
    protected $primaryKey = 'idorganization';
    protected $visible = ['organization_name', 'website','website','phone','num_employes','industry'];

    public function contacts() {
        return $this->belongsTo('App\Contacts', 'idorganization');
    }
}

連絡先のコントローラーは次のようになります

namespace App\Http\Controllers;
use App\Contacts;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;

class ContactsController extends Controller
{
    public function getAll() {
        $contacts = Contacts::all();
        return response()->json($contacts);
    }
}

idorganizationしかし、組織からのモデル列が応答に取り込まれません。

私はさらに $contacts = Persona::with('organization')->all();

しかし、それはエラーを返します

Call to undefined method Sofa\Eloquence\Query\Builder::all()

連絡先モデルと特性を削除しSofa\Eloquenceても、まだ機能しません。

明らかな何かが欠けていることを教えてください

関係がなければ、次のような応答が得られます

[
 {
    "firstname":"Abhik",
    "lastname":"Chakraborty",
    "idorganization":"1"
 },
 {
    "firstname":"John",
    "lastname":"Martin"
    "idorganization":"1"
 }
]

期待される結果は

[
     {
        "firstname":"Abhik",
        "lastname":"Chakraborty",
        "organization":{
          "organization_name": "foo"
          "website": "bar"
          ..................
        }
     },
     {
        "firstname":"John",
        "lastname":"Martin"
        "organization":{
          "organization_name": "foo"
          "website": "bar"
          ...............
        }
     }
 ]
4

1 に答える 1

1

idorganization呼び出し時に応答がフィールドに入力されない理由all()は、リレーションシップがデフォルトで遅延ロードされるためです。つまり、実際にアクセスしたときにリレーションシップ データがロードされます。

目的を達成するには、 eager loadingという名前のメソッドを使用している場合get()の代わりに、メソッドを使用する必要があります。all()with()

これを置き換えます:

Persona::with('organization')->all();    

と:

Persona::with('organization')->get();    
于 2016-05-02T03:48:31.103 に答える