2017-10-11 15 views
1

私はこれを書いているより良い方法を探しています。私はより良い方法が必要であるように感じる?Laravel Eloquent - 関係のフィールドを更新する

public static function logClick($lid) 
{ 
    $clickId = link::find($lid); 

    $clicks = click::find($clickId->click_id); 

    $c = $clicks->clicks; 
    $c++; 

    $clicks->clicks = $c; 
    $clicks->save(); 

    return $clicks; 
} 

モデル:ところで

class link extends Model 
{ 
    public function click() 
    { 
     return $this->hasOne('App\click', 'id' ,'click_id'); 
    } 

} 

class click extends Model 
{ 
    public function link() 
    { 
     return $this->hasOne('App\link'); 
    } 
} 

。すべてがちょうど私のコードの書き込みを改善するために探して、働く:)

+0

あなたのモデルを使用してくださいしてくださいします –

+0

は、私が我慢することに成功したものより道きれいだ私のモデルの:) –

答えて

1
public static function logClick($lId){ 
    click::whereHas('link', function($q)use($lId){ 
     $q->where('id', $lId); 
    }) 
    ->increment('clicks'); 
} 

これは

EDITを実行する必要があります。あなたは数

public static function logClick($lId){ 
     $click = click::whereHas('link', function($q)use($lId){ 
      $q->where('id', $lId); 
     }) 
     ->increment('clicks'); 
     return $click->clicks; 
    } 

クリックを返したい場合は、この1つのライナーは利点があります単一のクエリであるということです。 $q->where('id', $lId);場合には動作しません、$q->where('links_table_name.id', $lId);

+0

を追加しました。感謝:) –

1
public static function logClick($lid) 
{ 
    $clicks = link::find($lid)->click; 
    $clicks->increment('clicks'); 
    return $clicks; 
} 
+0

これも動作し、多くのもっときれいな! –

関連する問題