如何从用户文本输入中搜索数据库记录以进行匹配并避免提取信息? (PHP)
How to search database records for a match from user text input and avoid pulling the information? (PHP)
我有两个数据库 table,食谱 Table 和成分 Table。一份食谱可以包含多种成分,它们之间的关系由 Recipe_ID.
联系起来
食谱Table
- id
- suitable_for
RecipeIngredientsMain Table
- id
- recipe_id
- 成分名称
我有一个用户输入表单,用户可以在其中决定向他们推荐哪些食谱的限制条件。我有一个文本框输入,允许用户输入“特定过敏”。提取的值然后将搜索成分 table 以查找与名称的匹配项,如果通过查询关系缺失找到匹配项,则避免提取 Recipe_ID。
例如,如果用户输入“pineapple”,如果在 Ingredients table 中找到匹配项,它将避免拉取 Recipe_ID。
Recipe hasMany relationship in Model:
public function ingredients()
{
return $this->hasMany(Ingredients::class, 'recipe_id');
}
拉取用户输入:
$suited = $request->suitable_for;
$specificallerg = $request->specific_allergen;
Controller中的代码:
$recipenew = Recipe::where('recipe.suitable_for', $suited)
->whereDoesntHave('ingredients', function($QBspecificallergens) use($specificallerg) {
$QBspecificallergens->where('recipeingredientsmain.ingredientname', 'like', '%specificallerg%');
})->pluck('id');
代码运行,但我的问题是一个逻辑错误,因为它在 'ingredientname' 中搜索字面上的“%specificallerg%”而不是输入的值。我该如何解决这个问题?
您需要从前端获取您请求的字符串。不是您从 table.
搜索的那个
$suited = $request->suitable_for;
$specificallerg = $request->specific_allergen;
$recipenew = Recipe::where('recipe.suitable_for', $suited)
->whereDoesntHave('ingredients', function($QBspecificallergens) use($specificallerg) {
$QBspecificallergens->where('recipeingredientsmain.ingredientname', 'like', '%'.$specificallerg.'%');
})->pluck('id');
我有两个数据库 table,食谱 Table 和成分 Table。一份食谱可以包含多种成分,它们之间的关系由 Recipe_ID.
联系起来食谱Table
- id
- suitable_for
RecipeIngredientsMain Table
- id
- recipe_id
- 成分名称
我有一个用户输入表单,用户可以在其中决定向他们推荐哪些食谱的限制条件。我有一个文本框输入,允许用户输入“特定过敏”。提取的值然后将搜索成分 table 以查找与名称的匹配项,如果通过查询关系缺失找到匹配项,则避免提取 Recipe_ID。
例如,如果用户输入“pineapple”,如果在 Ingredients table 中找到匹配项,它将避免拉取 Recipe_ID。
Recipe hasMany relationship in Model:
public function ingredients()
{
return $this->hasMany(Ingredients::class, 'recipe_id');
}
拉取用户输入:
$suited = $request->suitable_for;
$specificallerg = $request->specific_allergen;
Controller中的代码:
$recipenew = Recipe::where('recipe.suitable_for', $suited)
->whereDoesntHave('ingredients', function($QBspecificallergens) use($specificallerg) {
$QBspecificallergens->where('recipeingredientsmain.ingredientname', 'like', '%specificallerg%');
})->pluck('id');
代码运行,但我的问题是一个逻辑错误,因为它在 'ingredientname' 中搜索字面上的“%specificallerg%”而不是输入的值。我该如何解决这个问题?
您需要从前端获取您请求的字符串。不是您从 table.
搜索的那个$suited = $request->suitable_for;
$specificallerg = $request->specific_allergen;
$recipenew = Recipe::where('recipe.suitable_for', $suited)
->whereDoesntHave('ingredients', function($QBspecificallergens) use($specificallerg) {
$QBspecificallergens->where('recipeingredientsmain.ingredientname', 'like', '%'.$specificallerg.'%');
})->pluck('id');