我正在尝试在唯一验证规则中添加aditional where子句。但在此之前,我需要与其他表联系。但我没有成功。
我有两张桌子:
带有id和名称字段
使用role_id,user_id和team_id这三个关键。
所以我需要检查teams.name字段对于一个特定用户是否是唯一的。 我试过这个:
'name' => Rule::unique('teams')->where(function ($query){
//return $query->where('account_id', 1);
return $query->join('role_user', 'role_user.team_id', '=', 'teams.id')->where('role_user', Auth::user()->id);
});
我知道问题在于加入,但我不知道如何解决它。 谢谢!
答案 0 :(得分:0)
$query->join('role_user', function ($join) {
return $join->on('role_user.team_id', '=', 'teams.id')->on('role_user', '=', Auth::id());
});
答案 1 :(得分:0)
这似乎是在Laravel如何完成对数据库的实际查询之前如何处理QueryBuilder对象的错误。打印查询日志显示未执行实际联接。在documentation (under "additional where clauses")中也可能是一个不足之处,因为这并未提及使用QueryBuilder的限制。
最快的解决方案是动态扩展Validator,如下所示:
function insertTMAfter(name) {
document.querySelectorAll('*').forEach(function(item){
if(item.children.length == 0)
item.innerHTML = item.innerHTML.replace(name, name + "™");
})
}
insertTMAfter("Stack Overflow");
// or in your case
insertTMAfter("Walmart Inc");
答案 2 :(得分:0)
Laravel 5.8-问题仍然存在。
请参见\ Illuminate \ Validation \ DatabasePresenceVerifier类,方法addConditions()。
可以清楚地看到,如果验证规则条件是闭包,那么它将在嵌套的where节中执行,这排除了使用联接的可能性:
public static void main(String[] args) throws IOException, DocumentException {
PdfReader reader = new PdfReader("E:\\JDBC\\1.pdf");
String pageContent = PdfTextExtractor.getTextFromPage(reader, 2);
System.out.println(pageContent);
Document document = new Document();
PdfWriter.getInstance(document, new FileOutputStream(new File("E:\\JDBC\\2.pdf")));
document.open();
Paragraph p = new Paragraph();
p.add(pageContent);
document.add(p);
document.close();
}
是的,在验证规则中使用联接的唯一方法是-制定自己的规则,如aross所说。