2017-08-24 2 views
0

は、次のように私は私のモデルが定義されている(PS:私は、このモデルクラスで使用したビューの主キーは、次のとおりです。vwAlarmActionSummaryYFUserSiteプライマリキーを持たないモデルの生のクエリにIDを渡す方法はありますか?

class Alarm extends Model 
{ 
    protected $table = 'vwAlarmActionSummaryYFUserSite'; 
    public $timestamps = false ; 

    public function scopeActiveAlarms($query) 
    { 
     return $query->whereDate('AlarmClearedUTCDateTime', '=', '9999-12-31 23:59:59.9999999'); 
    } 

    public function alarmActionDescription() 
    { 
     $rec = \DB::table('vwAlarmActionSummary') 
      ->where('AlarmId', '=', $this->AlarmId); 

     return $rec; 
    } 

} 

イムのようなモデルの上に呼び出します。

$alarm = Alarm::where('AlarmId', $id)->where('yfUserID', $yfUserID)->firstOrFail(); 

ここでは、alarmActionDescription()メソッドでこの例外を取得しています。

(1/2) LogicException 
Relationship method must return an object of type Illuminate\Database\Eloquent\Relations\Relation 
in HasAttributes.php (line 403) 
at Model->getRelationshipFromMethod('AlarmActionDescription') 
in HasAttributes.php (line 386) 
at Model->getRelationValue('AlarmActionDescription') 
in HasAttributes.php (line 316) 

私は私が私のコントローラから$idとして渡されAlarmIdを、渡しているそのため、vwAlarmActionSummaryテーブルから行を返したいです。

ここで何が間違っていますか? alarmActionDescription()メソッドを変更してAlarmIdに基づいて行を返すにはどうすればよいですか?

+0

あなたは私たちにあなたがalarmActionDescriptionを() – Wreigh

+0

@Wreigh、私は$警報のような私の質問に指摘したように、私のモデルを呼び出すイム=アラーム::(使用しているコードを表示することができます'AlarmId'、$ id) - >ここで( 'yfUserID'、$ yfUserID) - > firstOrFail();私は、$ alarmがalarmActionDescription()メソッドの情報を含む行を返すことを期待しています。 – Ratha

+0

はい、どこでどのように 'alarmActionDescription()'メソッドを呼び出していますか? – Wreigh

答えて

0

alarmActionDescription()メソッドを間違って呼び出しているようです。それはそれ属性ますよう

$alarm->alarmActionDescription; 

がそれを呼び出す:このように

。そうすることで、Laravelはあなたが関係のリストを取得しようとしていると仮定します。あなたのアラームの例では、あなたが持っている:

public function users() { 
    return $this->belongsToMany(User::class); 
} 

をあなたが行う場合は、次の

$alarm->users; 

あなたのアラームに関連するユーザーのコレクションを受け取ることになります。あなたは私たちがしばらく前に宣言した機能と同じ名前を持つ属性を呼んでいる

注意してください。

しかし、あなたがしなければ:

$alarm->users(); 

をこれは、関数が実行されますと、belongsToMany()ある関係を、返します。しかし、あなたの場合は

、機能alarmActionDescription()、あなたは、データベースからを返している、関係を返していません。あなたがやっていると述べてきたものとは対照的に

$alarm->alarmActionDescription(); 

$alarm->alarmActionDescription; 

お知らせ違い

で何をする

、のようなメソッドを呼び出します。詳細情報については

は: https://laravel.com/docs/5.4/eloquent-relationships

関連する問題