2017-10-12 14 views
1

私はCustomer、Receiver、Legalという3つのモデルを持っています。各モデルは1つのカードしか持たないので、私はカードと呼ばれるモデルを作成しました。多型関係を取得する方法とモデル構造体を取得する方法

これは、データベース内のテーブル

id | cardable_id | cardable_type | number    | ... 
-------------------------------------------------------------------- 
1 | 1   | Receiver | 6221-0612-0410-4907 | ... 
2 | 5   | Customer | 6301-4569-7896-4563 | ... 
3 | 2   | Legal  | 6748-8520-4569-9630 | ... 

マイカードモデル

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Card extends Model 
{ 
    public function cardable() 
    { 
     return $this->morphTo(); 
    } 
} 

マイカスタマーモデル

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Customer extends Model 
{ 
    public function card() 
    { 
     return $this->morphOne(Card::class,'cardable'); 
    } 

} 

マイ法的モデル

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Legal extends Model 
{ 
    public function card() 
    { 
     return $this->morphOne(Card::class,'cardable'); 
    } 
} 
私のカードであります3210

そして私のレシーバーモデル:テストの関係についてweb.phpの私の敗走で

namespace App; 

use Illuminate\Database\Eloquent\Model; 

class Receiver extends Model 
{ 
    protected $guarded = ['id']; 

    public function card() 
    { 
     return $this->morphOne(Card::class,'cardable'); 
    } 
} 

私は以下のコードを書いた:

Route::get('test',function() { 
    $card = \App\Card::find(1); 
    return $card->cardable; 
}); 

を、私は次のエラーに直面:

Class 'Receiver' Not found.

逆の関係を使用しようとすると:

Route::get('test2',function() { 
    $customer = \App\Customer::find(5); // a customer with id=5 does exist 
    return $customer->card; 
}); 

nullを返します。
私は$card->cardableを使用してカードの所有者のインスタンスを取得しても、私は何をしないのです$customer->cardまたは$receiver->cardまたは$legal->card
を使用してカードのインスタンスを取得しようとしていますか?これは私が私の目的のために選んだ正しい関係ですか?

答えて

2

cardable_type\App\Receiver

+0

あなたの答えが正しいかのようにモデル化するためのリンクでなければならない、私は、アプリのフォルダは、この目的のためのルートフォルダとして考えられていると思いました。 リレーションのルートフォルダを変更する方法はありますか? –

+1

@AliSeyfi no、モデルの現在位置を手動で指定する必要があります。 –

関連する問題