9

オブジェクトを返そうとしていますContractが、そのすべてが関連していProjectます。すべての を返すことができますContractが、コントラクトの を取得しようとするとProject、「クラス 'EstimateProject' が見つかりません」というエラーが発生します。クラス マッピングをリロードするために実行しましcomposer dump-autoloadたが、それでもエラーが発生します。何か案は?これが私のクラスのセットアップです:

編集:LaravelBook\Ardent\Ardent\ Laravel の Model.php の拡​​張機能を追加したかっただけです。関数のモデルに検証を追加しSaveます。Eloquent ORM の MongoDB バージョンである、追加した別のプラグインを Ardent に拡張させました。

EstimateContract.php

<?php namespace Test\Tools;

  use LaravelBook\Ardent\Ardent;

  class EstimateContract extends Ardent {

     // This sets the value on the Mongodb plugin's '$collection'
     protected $collection = 'Contracts';

     public function projects()
     {
        return $this->hasMany('EstimateProject', 'contractId');
     }
  }

EstimateProject.php

<?php namespace Test\Tools;

  use LaravelBook\Ardent\Ardent;

  class EstimateProject extends Ardent {

   // This sets the value on the Mongodb plugin's '$collection'
   protected $collection = 'Projects';

   public function contract()
   {
      return $this->belongsTo('EstimateContract', 'contractId');
   }
}

EstimateContractController.php

<?php

  use  \Test\Tools\EstimateContract;

  class EstimateContractsController extends \BaseController {

/**
 * Display a listing of the resource.
 *
 * @return Response
 */
    public function index()
    {
        $contracts = EstimateContract::all();

        echo $contracts;

        foreach($contracts as $contract)
        {
            if($contract->projects)
            {
                echo $contract->projects;
            }
        }
     }
}
4

2 に答える 2

25

これを機能させるには、EstimateContract モデルで EstimateProject 文字列を完全に修飾する必要がありました。

解決策は、次のように変更することでした。

return $this->hasMany('EstimateProject', 'contractId'); 

return $this->hasMany('\Test\Tools\EstimateProject', 'contractId');
于 2013-08-06T17:36:35.930 に答える
2

完全修飾名を使用する必要がありますが、バック スラッシュの代わりにスラッシュを使用すると同じエラーが発生しました。

//Correct
return $this->hasMany('Fully\Qualified\ClassName');
//Incorrect
return $this->hasMany('Fully/Qualified/ClassName');
于 2015-09-10T16:41:34.610 に答える