如何防止在 Laravel Blade 文件的 foreach 循环中显示重复项?

How Can I Prevent Showing Duplicate In foreach loop At Laravel Blade File?

这是我的观点blade 文件:

这是我的 table 数据:

这是我的查看代码:

<form action="" method="post">
@csrf
@foreach($options as $opt)

 <label for="siteName">site name</label>
 <input type="text" id="siteName" name="siteName" value="{{$opt->o_name('siteName')}}">

 <label for="siteURL">site url</label>
 <input type="text" id="siteURL" name="siteURL" value="{{$opt->o_name('siteURL')}}">

@endforeach

 <input type="submit" value="save">
</form>

这是我的控制器代码:

public function viewOptions()
{
    $options = Option::all();
    return view('view/options', compact('options'));
}

这是我的 class 代码:

protected $guarded = [];

public function o_name($val)
{
      $valss = DB::table('options')
                   ->select('o_value')
                   ->where('o_name', '=', $val)
                   ->first();
      return $valss->o_value;
}

我想在视图中显示一次而不是重复的数据和输入表单@ 我怎样才能做到这一点?我的鳕鱼有什么问题?

更新您的控制器代码并替换

$options = Option::all();

$options_all = Option::all();
$options=$options_all[0];

新代码如下所示

public function viewOptions(){
    $options_all = Option::all();
    $options=$options_all[0];
    return view('view/options', compact('options'));
}

试试这个

 <label for="siteName">site name</label>
 <input type="text" id="siteName" name="siteName" value="{{$option->o_name('siteName')}}">

 <label for="siteURL">site url</label>
 <input type="text" id="siteURL" name="siteURL" value="{{$option->o_name('siteURL')}}">

控制器

public function viewOptions()
{
    $option = Option::all()->first();
    return view('view/options', compact('option'));
}

我认为是因为您在 @foreach 和 foreach 循环中使用了两个输入..

试试这个:

<form action="" method="post">
@csrf
@foreach($options as $opt)

 <label for="{{ $opt->o_name }}">{{ $opt->o_name }}</label>
 <input type="text" id="{{ $opt->o_name }}" name="{{ $opt->o_name }}" value="{{ $opt->o_value }}">

@endforeach

 <input type="submit" value="save">
</form>

更新:

如果你想获取特定的行,你可以只获取你想要的然后传递给视图

$options = DB::table('options')
                ->where('o_name', 'siteName')
                ->orWhere('o_name', 'siteUrl')
                ->get();

或使用查询生成器:

$options = Option::where(function ($q) {
     $q->where('o_name', 'siteName')->orWhere('o_name', 'siteUrl');
})->get();

另一种方法是使用 laravel 作用域