如何为雄辩的关系添加条件

时间:2017-08-09 13:07:16

标签: laravel laravel-5 eloquent laravel-5.3 laravel-eloquent

这是我的情况

$user = User_picture::where('is_main','=',1)->where('user_id','=',Auth::user()->id);

这意味着用户拥有许多图片,但只有一张图片的is_main值为1

我试过了。

public function active_picture()
{
    return $this->hasMany('App\User_picture')->find($this->is_main);
}

除了表示它应该是对象的错误之外,它不会返回任何内容。有人可以帮我解决这个问题吗?

2 个答案:

答案 0 :(得分:0)

HasMany旨在返回一个集合,因为它是一对多的关系方法。

如果您只想返回一个结果,则应使用具有条件的HasOne。要定义条件,请使用where()not find()。 Find()仅用于匹配模型的主键。

public function active_picture()
{
    return $this->hasOne('App\User_picture')
           ->where('is_main', 1);
}

答案 1 :(得分:0)

您可以声明一个访问者:

在用户模型中:

//声明关系:

public function getMainPictureAttribute()
{
   return $this->pictures()->where('is_main', 1)->first();

}

//声明访问者:

auth()->user()->main_picture ...

所以你可以这样做:

/*
Frees node by node recursively
*/

void freeSpace(node* t)
{   
    for (int i = 0; i < 27; i++)
    {
        if(t->children[i] != NULL)
        {
            freeSpace(t->children[i]);
        }
    }
    free(t);
}

/**
 * Unloads dictionary from memory. Returns true if successful else false.
 */ 
bool unload()
{

    if(root != NULL)
    {
        trie = root;
        freeSpace(trie);
        return true;
    }
    else
    {
        return false;
    }

}