Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Как по мне так для таких целей лучше использовать посредника. Или я чего-то не знаю ?
Если я вас правильно понял то так
use View;
...
public function __construct($id = null)
{
View::share('foo', $bar);
}
Представим 3 таблицы
articles (id, slug)
news(id, slug)
langs(id, lang_id, entity_id, entity_type)
Связь у них morphMany с langs. Как можно добавить каскадное удаление для articles и для news одновременно ? Спасибо заранее!
Нужно создать страницу контактов (с управлением из админки) в которой
1. Будет форма для отправки сообщений с дропдауном из емайл адресов.
2. Будет список контактов разделенный отделы компании такого формата
-> (к примеру) | Приемная (номер, номер, емайл), Отдел кадров (номер, емайл), бухгалтерия (номер, номер, номер).
Данные могут меняться, к примеру в приемной (номер, емайл, емайл).
3. Табы районов одного города в которой так же несколько значений
-> (к примеру). Центр города (Отдел1-(номер, номер), отдел2-(номер), Отдел3-(номер, номер, номер)).
Номера в 3-м пункте не повторяются , и не связаны с данными из пункта но. 2.
Как бы вы решили данную задачу? Спасибо за идеи заранее.
И это самое лучшее решение. Если есть возможность переложить работу с PHP-кода на БД, то это всегда нужно делать, так как это проще и надежнее.
Почитав документации, пришел к такому же выводу. Спасибо ещё раз.
Доброго времени суток.
Скажите пожалуйста, как в laravel, грамотно организовать отношения в ОДНОЙ таблице.
Если было бы сделано в двух таблицах то это выглядело бы так.
Contacts (id, name_en, name_ru) ->hasMany(Contact_lists)
Conctact_lists (id, contact_id, type(enum(email,phone))
Но как это реализовать в одной и той же таблице?
Спасибо.
Спасибо большое за ответ. Все таки для решения данной задачи решил использовать foreign.
Есть 4 таблицы
1. Categories (id, slug)
->hasMany(category_langs)
->hasMany(articles)
2. Category_langs (id, category_id, lang_id, title)
->belongsTo(categories)
3. Articles (id, category_id, image, slug)
->belongsTo(categories)
->hasMany(article_langs)
4. Article_langs (id, article_id, lang_id, title, content)
->belongsTo(articles)
Задача -> при удалении категорий удалить article->langs(), articles(), category_langs(), category. при этом еще сделать грамотный unlink для изображений в articles.
Как это можно сделать при таком раскладе, или как поменять реляции что бы воплотить данный функционал ТОЛЬКО средствами Laravel, без создания реляций по ключу в самой ДБ !? Заранее спасибо !
Спасибо за помощь. Можно закрывать!
Доброго времени суток. Такой вопрос. Есть метод uploadImage() которая вызывается из разных конроллеров, на данный момент данная функция повторяется в каждой модели News, Pages ...., хочется как то расширить Eloquent Model что бы добавить функцию один раз, и что бы небыло нужды повторять его в каждой модели. При этом это надо сделать так что бы не зализать в папочку vendor. Буду благодарен за помощь!
Доброго времени суток. Пытаюсь залить Laravel (5.4) проект на хостинг. В итоге получаю 500 HTTP Error.
Проверял уже все что возможно. С правами точно проблем нет, даже при 777 НА ВСЕ выдает тот же 500. Логи молчат, доступа к apache log нету, и доступ даже не собираются давать (саппорт молчит). Уже не знаю что делать. На локалхосте все работает. Подскажите может кто сталкивался. Хоть скажите куда копать. Спасибо заранее.
если $articles - это коллекция моделей элоквент:
Спасибо большое за вмешательство но думаю вы не поняли суть вопроса.
Решил так
if(App::getLocale()=="ru"){
foreach($articles as $key=>$article){
$article["title"] = $article->title_ru;
$articles[$key]=$article;
unset($key,$article);
}
}
Можете закрывать!
Добрый день. Проблема такая. Есть таблица articles у которой приблизительная структура такая:
$table->string('title_ru');
$table->string('title_en')->nullable();
$table->text('content_ru');
$table->text('content_en')->nullable();
$table->.....
Не кидайтесь на меня я знаю что такое решение мало назвать костыльным, но суть вот в чем ->
В переменной $articles я храню все посты. Мне нужно в контроллере прочекать текущий язык и вывести в статью соответствующий title и content.
Чекать и менять язык на соответствующий я собрался так
if (App::getLocale() == 'ru')
{
foreach($articles as $article)
{
$article['title'] = $article->title_ru;
}
}
Все замечательно, только вот как сохранить данные изменения обратно в переменную $articles что бы передать во view и распарсить там тем же @foreach !? Заранее благодарю.
Задача такова что нужно вернуть текст ошибки пользователю если у article_id (к примеру 1) уже существует invoice с мылом example@mail.com а пользователь именно его пытается добавить. Такое решение выполнит данную задачу ?
да, будет \PDOException – лови его и может даже проверить по подстроке в $exception->getMessage(), типа
if (strstr(strtolower($e->getMessage()), 'duplicate entry')) { /* попытка купить уже купленную статью */ }
Все работает, спасибо большое !
ну здесь не только в миграциях дело, надо бы и mysql знать. вообще просто, если через миграции – что-то типа
$table->unique(['article_id', 'email']);
ps. или наоборот – ['email', 'article_id']. такой индекс может использоваться в выборках только по первому полю или по обоим. но не может – только по второму. если выбираешь часто все покупки по email – второй вариант, если «все, кто купил такую-то статью» – первый
А как "unique" со вторым параметром работает в данном случае ?
Задача такова что нужно вернуть текст ошибки пользователю если у article_id (к примеру 1) уже существует invoice с мылом example@mail.com а пользователь именно его пытается добавить. Такое решение выполнит данную задачу ?
Спасибо за помощь !!!!
не вижу в invoices поля user_id. вообще получается что пользователи и articles связаны отношениями многие-ко-многим, а invoices - пивот-таблица с набором доп. свойств и полями article_id, user_id, ... очевидно что если на связи индекс по [user_id, article_id] объявить как уникальный, то на уровне СУБД добавляемые связи пользователей на статьи будут проверяться на уникальность и попытка добавления связи которая уже существует будет вызывать \PDOException. больше похоже на то что нужно?
не вижу смысла делать belongsToMany здесь.
в принципе даже если invoices используется не как пивот а как обычная сущность – всё равно на ней есть article_id и user_id и по ним всё равно можно сделать уникальный индекс.
Я в место user_id хочу использовать email т.к добавлять invoice могут как зарегистрированные пользователи так и обычные гости сайта у которых естественно нет user_id. Вопрос в том как именно этот уникальный индекс сделать ?! Я просто не полностью освоил миграции !
Нет, не вариант. Есть идеи какие-нибудь
Есть таблица articles (id, title, content,........) и таблица invoices (id, article_id,email,price,......)
Как сделать уникальную связку между article_id и email в таблице invoices ? Смысл в том, что бы один пользователь мог добавить только одну заявку на один article. То бишь пользователь с мылом example@mail.com мог кинуть заявку на article 1, 2, 3, 4, только по одному разу на каждый !? Спасибо
А что в логе написано?
Лог laravel вообще молчит.
Если подключить token в data , консоль говорит 500, если в headers говорит success но при этом сама функция не вызывается
Хммм, у меня почти все проекты с ajax и никогда не было проблем, использую пока laravel 5.3
давайте тогда в студи код js, код html и желательно текст ошибки, до кучи ...
ну а если вы на какой ни будет тестовый сервер повесите это всё дело, где можно пощупать, было бы отлично
Хорошо, тестовый сервер попробую найти и функция js скину сюда позже т.к сейчас в дороге
Я уже устал писать всем одно и тоже, может мне вынести это в отдельную статью
почему у людей не получается отправлять ajax запросы
потому что нужно посылать прицепом со всеми данными значение токе... '_token':$('#_token').val() ...
и вписывать соответствующий тег на странице
Я вас прекрасно понимаю, и с радостью сообщаю что присутствие hidden input-a с токеном который отправляется в data выдает тот же 500 Internal Server Error.
Пробовал и в headers его запихать. Ноль на массу ! Сидим с ребятами недоумеваем как и почему!?
если Route:post, то через Ajax,
если Route:get - можно location.href = "/archive/"+id;
Через Route::get все работает замечательно, проблема в том что мне нужно все это сделать не обновляя страницу, а route::get возвращает пустую страницу и приходится в контроллере дописывать Redirect::back().
Если использовать Ajax то я по непонятным причинам получаю ответ 500 (Internal Server Error)
Как вызвать функцию с контроллера с параметром средствами JavaScript. Никак не получается и все!
Controller:
public function archive($id)
{
$article = Article::find($id);
$article->public = 0;
$article->featured = 0;
$article->archive = 1;
$article->save();
}
И прилагающийся роут:
Route::post('/archive/{id}', 'HomeController@archive');
Буду благодарен ЛЮБЫМ рабочим вариантам. Спасибо!
попробуйте убрать
добавитьdata: {'id': item_id, 'public' : '0', '_token':$('#_token').val()},
Не помогло, та же ошибка
Метод PUT обязателен, POST не подходит?
Да обязателен т.к мне нужно апдейтить уже существующие данные.
Да и с POST та же проблема