Laravel 5.3仅在同一表中的另一行不存在时才返回结果

时间:2018-09-14 06:05:49

标签: laravel

基本上,我有一个Followers表,其中存储了user_id和followable_id。例如,如果用户A跟随用户B,则会创建一条记录。如果B跟在A之后,则创建一个新记录。仅当A跟随B时我才需要返回结果,但是如果B也跟随A则不返回任何内容。

我尝试了各种解决方案,但没有一个可行。也许有人可以指出我正确的方向。

编辑: 但这有效,但是它很丑陋,我想避免这种情况:

$iFollows = Followers::where('user_id', '=', $currentUser->id)->get();
$myFollowers = Followers::where('followable_id', '=', $currentUser->id)->get();


    foreach($myFollowers as $key => $value){

        foreach($iFollows as $iFollow){

            if($value->user_id == $iFollow->followable_id){
                $myFollowers->forget($key);
            }
        }
    }

数据库结构:

enter image description here

除了使用laravel查询生成器外,是否有办法实现相同的目的?

用户实现称为“可追踪”的特征

trait Followable
{
    /**
     * Collection of followers attached to this object
     *
     * @return Query|Collection
     */
    public function followers()
    {
        return $this->morphToMany(
            User::class,        // related
            'followable',       // name
            'followers',      // table
            'followable_id',    // foreignKey
            'user_id'           // otherKey
        )->where('status', 1)->withPivot('created_at', 'updated_at');
    }

    /**
     * @return mixed
     */
    public function followings()
    {
        return $this->morphToMany(
            User::class,        // related
            'followable',       // name
            'followers',      // table
            'user_id',    // foreignKey
            'followable_id'           // otherKey
        )->where('status', 1)->withPivot('created_at', 'updated_at');
    }

1 个答案:

答案 0 :(得分:0)

好的,我终于用这种方法解决了我的问题:

/**
 * Class FollowableTrait
 * @package App\Traits
 */
trait Followable
{
    /**
     * @param  array $ids 
     * @return mixed
     */
    public function newFollowers($ids)
    {
        return $this->morphToMany(
            User::class,        // related
            'followable',       // name
            'followers',      // table
            'followable_id',    // foreignKey
            'user_id'           // otherKey
        )->where('status', 1)->whereNotIn('user_id', $ids)->withPivot('created_at', 'updated_at');;
    }

然后在我的控制器中

$ids = $currentUser->followings()->pluck('followable_id')->toArray();
$newFollowers = $currentUser->newFollowers($ids)->get();