Laravel & amp; Typeahead.js: получить имя категории, но отправить ее идентификатор в базу данных?

Мне удалось интегрировать Typeahead.js с моим приложением laravel. Но, к сожалению, мне нужно представить его ID вместо его name, Мне нужно получить название категории с помощью Typeahead, но вставить ее идентификатор в базу данных, потому что именно так я на него ссылаюсь.

До сих пор я получаю ошибку sql, потому что она ожидает целое число, но вместо этого она получает строку (имя категории).

Я пытался сделать foreach и назначить $result->id в $data[] но это не сработало вообще.

Как я могу это исправить?

getSubreddits метод в PostsController

public function getSubreddits($query) {
$results = Subreddit::select('name')->where('name', 'LIKE', '%' . $query . '%')->get();
return Response::json($results);
}

JS

<script type="text/javascript">
$(document).ready(function() {
var subreddits = new Bloodhound({
datumTokenizer: Bloodhound.tokenizers.obj.whitespace('name'),
queryTokenizer: Bloodhound.tokenizers.whitespace,
prefetch: 'http://localhost/reddit/public/data/subreddits',
remote: {
url: 'http://localhost/reddit/public/data/subreddits/%QUERY',
wildcard: '%QUERY'
}
});

$('#remote .typeahead').typeahead(null, {
name: 'name',
display: 'name',
source: subreddits
});
});
</script>

Маршруты

Route::get('data/subreddits', 'PostsController@getSubreddits');
Route::get('data/subreddits/{QUERY}', 'PostsController@getSubreddits');

все store() метод в PostsController.php

public function store(PostRequest $request)
{
if (Input::has('link')) {
$input['link'] = Input::get('link');
$info = Embed::create($input['link']);

if ($info->image == null) {
$embed_data = ['text' => $info->description];
} else if ($info->description == null) {
$embed_data = ['text' => ''];
} else {
$extension = pathinfo($info->image, PATHINFO_EXTENSION);

$newName = public_path() . '/images/' . str_random(8) . ".{$extension}";

if (File::exists($newName)) {
$imageToken = substr(sha1(mt_rand()), 0, 5);
$newName = public_path() . '/images/' . str_random(8) . '-' . $imageToken . ".{$extension}";
}

$image = Image::make($info->image)->fit(70, 70)->save($newName);
$embed_data = ['text' => $info->description, 'image' => basename($newName)];
}

Auth::user()->posts()->create(array_merge($request->all(), $embed_data));

return redirect('/articles');
}
Auth::user()->posts()->create($request->all());

return redirect('/');
}

И форма

{!! Form::open(['url' => 'posts', 'method' => 'POST']) !!}
<p>
{!! Form::label('title', 'Title:') !!}
{!! Form::text('title', null, ['class' => 'form-control', 'id' => 'title']) !!}
</p>

<p>
{!! Form::label('link', 'Link:') !!}
{!! Form::text('link', null, ['class' => 'form-control', 'id' => 'link']) !!}
</p>

<p>
<div id="remote">
<input class="form-control typeahead" type="text" placeholder="Choose a Subreddit" name="subreddit_id">
</div>
</p>

<p>
{!! Form::submit('Submit Post', ['id' => 'submit', 'class' => 'btn btn-primary']) !!}
</p>

{!! Form::close() !!}

1

Решение

Я получил это работает

<div id="remote">
<input class="form-control typeahead" type="text" placeholder="Choose a Subreddit" name="subreddit_name">
<input type="hidden" id="subreddit_id" name="subreddit_id" value="">
</div>
...
$('#remote .typeahead').bind('typeahead:select', function(ev, suggestion) {
$('#subreddit_id').val(suggestion.id);
});
0

Другие решения

Других решений пока нет …

По вопросам рекламы [email protected]