好的,我必须在这里找不到简单的东西。
我有' kjv'表,每一行都是kjv圣经的一节经文:
CREATE TABLE `kjv` (
`id` int(11) NOT NULL,
`book` varchar(140) COLLATE utf8mb4_unicode_ci NOT NULL,
`chapter` smallint(6) DEFAULT NULL,
`verse` int(11) DEFAULT NULL,
`contents` mediumtext COLLATE utf8mb4_unicode_ci
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci
我还有一个评论表,每一行都有一个特定经文的评论。
CREATE TABLE `commentary` (
`id` int(11) NOT NULL,
`kjv_id` int(11) NOT NULL,
`note` mediumtext COLLATE utf8mb4_unicode_ci NOT NULL,
`type` tinyint(4) NOT NULL COMMENT 'BOOL',
`intro` tinyint(1) NOT NULL
) ENGINE=MyISAM DEFAULT CHARSET=utf8mb4 COLLATE=utf8mb4_unicode_ci;
好。所以,据我所知,我可以在我的KJVController中以这种方式获取commantary:
$results = KJV::where('book', '=', $this->book)
->where('chapter', '=', $this->chapter)
->leftJoin('commentary', 'kjv.id', '=', 'kjv_id')
->get();
dd($results);
这很棒,但是当我显示结果时,我不会得到多个评论。
所以,as per this example我在KJV模型中添加了这个函数:
class KJV extends Model
{
protected $table = "kjv";
function commentary() {
return $this->hasMany(Commentary::class);
}
}
在我的KJVController中添加了use App\Commentary;
。现在再次,根据示例,我应该能够在->comments
查询中的某处引用KJV::where
,并删除leftJoin
。但无论我做什么,我都会遇到错误。
答案 0 :(得分:2)
您将能够像这样访问它们:
KJV::where('book', $this->book)->where('chapter', $this->chapter)->first()->commentary
您不需要get()
和旁注:您无需在=
内指定where
PS:确保评论的kjv_id
设置为您要检索的KJV ID。
PS 2:如果您想要检索多个kjv的所有评论,您可以按照以下步骤操作:
KJV::where('book', $this->book)->where('chapter', $this->chapter)->with('commentary')->get()