Как предотвратить отображение дубликата в цикле foreach в файле лезвия Laravel? - PullRequest
0 голосов
/ 06 апреля 2019

Это мой блейд-файл вида:

1 И это мои данные таблицы:

2

Это код моего вида:

<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'));
}

Это код моего класса:

protected $guarded = [];

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

Я хочу показать один раз в поле зрения, а не дублировать данные иформа ввода @ Как я могу это сделать?в чем проблема с моими тресками?

Ответы [ 3 ]

1 голос
/ 06 апреля 2019

Я думаю, потому что вы используете два ввода в вашем @foreach и цикле foreach 2 раза ..

попробуйте это:

<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 Scopes

0 голосов
/ 06 апреля 2019

Попробуйте с этим

 <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'));
}
0 голосов
/ 06 апреля 2019

Обновите код контроллера и замените

$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'));
}
...