繁体   English   中英

从数据透视表中检索数据

[英]retrieve data from pivot table

我经历了一些类似的主题,但没有找到可行的解决方案。 主要是我没有很好地理解这个概念。 我有一个具有以下结构的简单数据库:

QUESTIONS
qid
question

TAGS
tagid
tag name

QUESTION_TAGS
qid
tagid

我的问题模型:

class Question extends Model
{
    protected $table="questions";

    public function tags()
    {
        return $this->hasMany('App\Question_tags','qid','qid');
    }

}

我的标签模型:

class Tags extends Model
{
    protected $table="tags";
}

Question_tags 模型:

class Question_tags extends Model
{
    protected $table="question_tags";
}

问题控制器:

class QuestionCtrl extends Controller
{

    public function getquesdet(){
        $id = Request::input('id');

        $question = Question::where('q_id','=',$id)->with('tags')
        ->get();

        return $question;      
  }
 };

正如预期的那样,返回的值由ids组成。 所以,我希望返回的值是tag names 我很乐意听到一些解释。

通过查看您的数据库模式,它是一个many-to-many关系,因此您的关系函数应为:

Question模型中:

public function tags()
{
    return $this-> belongsToMany('App\Tags', 'QUESTION_TAGS', 'qid', 'tagid');
}

Tags模型中:

public function questions()
{
    return $this-> belongsToMany('App\Question', 'QUESTION_TAGS', 'tagid', 'qid');
}

然后在你的控制器中,你可以写成:

$question = Question::where('q_id','=',$id)->with('tags')->first();

return $question->tags->pluck('name'); // returns array of tag names

注 - 无需为数据透视表Question_tags定义模型。

你好,在你的例子中,你试图在问题和标签之间建立多对多的关系,你的数据库看起来不错。 但是在您的模型中,您已经创建了关系函数来填充相关数据,从而解决该函数中的问题。 你的问题模型是

class Question extends Model
{
protected $table="questions";

public function tags()
{
    return $this->hasMany('App\Question_tags','qid','qid');
}

}

在此您使用hasMany函数,该函数用于建立 1 对多的关系。

使用函数belongsToMany使关系成为多对多。

我也面临这样的问题。 我需要根据标记模型的标记ID提出所有问题。 请让我知道

暂无
暂无

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

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