如何从用户文本输入中搜索数据库记录以进行匹配并避免提取信息? (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

RecipeIngredientsMain Table

我有一个用户输入表单,用户可以在其中决定向他们推荐哪些食谱的限制条件。我有一个文本框输入,允许用户输入“特定过敏”。提取的值然后将搜索成分 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');