简体   繁体   English

Laravel Eloquent-更新关系中的字段

[英]Laravel Eloquent - updating a field in a relation

I'm looking for a better way of writing this. 我正在寻找一种更好的编写方式。 I feel like there must be a better way? 我觉得必须有更好的方法吗?

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;
 }

Models: 楷模:

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');
    }
}

Btw. 顺便说一句。 everything works, just looking to improve my code writing :) 一切正常,只是想改善我的代码编写:)

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

This should do 这应该做

EDIT: if you want to return the clicks number 编辑:如果您想返回点击数

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

This one liner has the advantage of being a single query. 这一衬里的优点是可以进行单个查询。 In case $q->where('id', $lId); 如果$q->where('id', $lId); doesn't work, make sure to use $q->where('links_table_name.id', $lId); 不起作用,请确保使用$q->where('links_table_name.id', $lId);

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

声明:本站的技术帖子网页,遵循CC BY-SA 4.0协议,如果您需要转载,请注明本站网址或者原文地址。任何问题请咨询:yoyou2525@163.com.

 
粤ICP备18138465号  © 2020-2024 STACKOOM.COM