我已经完成了一些类似的主题,但没有找到有效的解决方案。大多数情况下,我对这个概念并不了解。 我有一个简单的数据库,具有以下结构:
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
。我很乐意听到一些解释。
答案 0 :(得分:2)
通过查看数据库模式,它是一个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
定义模型。
答案 1 :(得分:1)
你好,在你的例子中,你试图在问题和标签之间建立多对多的关系,你的数据库看起来很好。 但是在你的模型中你已经建立了关系函数来填充相关数据中的函数问题。 你的问题模型是
class Question extends Model
{
protected $table="questions";
public function tags()
{
return $this->hasMany('App\Question_tags','qid','qid');
}
}
在此您使用的hasMany
函数用于建立1到多的关系。
使用函数belongsToMany
将关系设置为多对多。