2016-05-17 7 views
3

同じ列名とリレーションシップ名を使用できますか?Laravel列名とリレーションシップ名は同じ

例:

は私がmack.phpモデルの列edited_byを持っていると私は、ユーザーテーブルからedited_byに記載されたユーザーの完全な詳細を取得したいので、私は

public function edited_by(){ 
     return $this->hasOne('App\User','id','edited_by'); 
    } 
以下のような関係を持っています

今、私がアクセスしようと$モデル - > edited_by->

「非オブジェクトのプロパティを取得しようとしている」その投げエラーをFIRST_NAME

は、別の名前を持つ以外の方法で修正する方法はありますか?

答えて

2

短い答えはいいえです。見つかった場合は常に列が返され、その名前の列が見つかった場合は関係が返されないため、同じ名前にすることはできません。

列名をuser_idに変更する方がedited_byよりも適切です。よりわかりやすく、Eloquentが探すデフォルトのIDです。同様に、リレーションシップ名はedited_by()ではなくuser()となり、ユーザーモデルが返されるので意味があります。少し長い

、そして完全に間違った答えは、あなたとの関係にアクセスできることである $モデル - > edited_by() - これはしかし、不必要に実行され、余分なクエリになります> FIRST_NAME

+3

さらに、PSR-1標準では、すべてのメソッドがcamelCaseでなければならず、mysql guideではfew_keywords_columnsにアンダースコアを使用する必要があると述べています。ですから、基本的に 'editedBy()'メソッドと 'edited_by'というSQLカラムを一緒に使うことができます。ソース:http://www.sqlstyle.guide/、https://github.com/php-fig/fig-standards/blob/master/accepted/PSR-1-basic-coding-standard.md –

関連する問題