Русское сообщество разработки на PHP-фреймворке Laravel.
Ты не вошёл. Вход тут.
Появилась необходимость сделать простой блог. Долго сидеть нет времени, да и на пятой ларе только еще начинаю кодить.
Собственно вопрос - есть ли простенький блог на 5й версии (пусть даже и с необходимостью небольшого допила)?
Я правильно понимаю?
1. Времени нет. Т.е. надо что бы вчера
2. 5 Ларку первый раз увидел? И разбираться особенно не хочется?
Вопрос, зачем тебе тогда блог именно на ларке? Wordpress и вперед.
Процеес изучения ларки ни терпит спешки. Надо потратить время, разобраться, как что работает, а потом в учебных целях за пару дней написать блог.
Забей на то, что там лежит. Качай нормальный дистрибутив и подключай к странице.
->leftJoin('........')->
Для этого laravel не нужен.
mysql> ALTER TABLE t1 RENAME t2;
1. Контроллер должен быть один
Route::controller('/test','MainController')
В самом контроллере получаешь данные из разных моделей
$model1=new Component;
$model2=new Type;
Далее крутишь данными, как хочешь и выплевываешь во вьюшку (представление)
2. Можно
$query = DB::table('component')->leftJoin('type','type.component_id','=','type.id')->select('component.title','type.name'........)->get();
По мне так лучше считать count. Зачем плодить лишние таблицы и еще отслеживать их изменения? Когда вся информация уже есть в существующих таблицах.
Форму как создаешь?
Form::open()?
Или ручками: <form method="POST">
Если второй вариант то скрытое поле надо создавать ручками
<input type="hidden" name="_token" value="{{csrf_token()}}">
Вводить дополнительную проверку.
$articles=DB::table('article')->count('id'); // общее количество записей
$allpage=ceil($article/10) //10 - это количество записей на одной странице. Значение округляется в большую сторону. $allpage - общее количество страниц
if(Input::get('page')>$allpage) // если запрошенная страница больше чем общее количество страниц то выкидываем 404
{
App::abort(404);
}
Достаточно.
Но
Route::get('/{catalog_slug}', 'CatalogController@show');
под этот шаблон может много чего лишнего попасть.
Например:
site.ru/catalog
site.ru/article
site.ru/contacts
И обработку эти маршрутов будет брать на себя CatalogController@show.
Хотя если на сайте будет только каталог то нормально.
Пример выборки по цене от 1000 до 3000
$data=DB::table('products')->whereBetween('price',[1000, 3000])
->leftJoin('categories','products.category_id','=','categories.id')
->leftJoin('atributes','atributes.category_id','=','categories.id')
->leftJoin('value','value.atribute_id','=','atributes.id')
->select('products.name as name','products.price as price','categories.name as category','atributes.name as atribute','value.value')
->orderBy('products.price')
->get();
Через Eloquent скорее все не получится. Через ОРМ работает.
Это запрос всех товаров со всеми атрибутами и значениями атрибутов, с названием категории с сортировкой по цене.
class MainController extends BaseController {
public function index()
{
$data=DB::table('products')
->leftJoin('categories','products.category_id','=','categories.id')
->leftJoin('atributes','atributes.category_id','=','categories.id')
->leftJoin('value','value.atribute_id','=','atributes.id')
->select('products.name as name','products.price as price','categories.name as category','atributes.name as atribute','value.value')
->orderBy('products.price')
->get();
return View::make('index',['data'=>$data]);
}
}
Во вьюшке делаешь разбор
@foreach($data as $item)
{{$item->price}}
{{$item->name}}
....
{{$item->value}}
Для каждого товара атрибут только один? Т.е. если это жесткий диск, то он имеет только объем? Или атрибутов для каждого товара буде много? Объем, размер, скорость и.т.д.?
По-моему, здесь проблема не в запросе, а скорее в неправильно спроектированных таблицах.
С xlsx лучше не работать. Сохрани файл как csv. Потом есть встроеная функция в PHP fgetcsv. Разбираешь построчно и загоняешь в базу.
$model=Phone::where('id','=','82')->take(1)->get();
return .........
И далее
$model->name;
$model->title;
$model->id;
Проверил. Увы не работает..
Куки можно удалять обычным php способом.
public function delcookie(){
foreach($_COOKIE as $key){
if(!is_int($key)) continue;
setcookie($key,' ');
}
return Redirect::to('cart/index');
}
функция удалить все куки, имена которые, целые числа.
На деле не пробовал.
P.S. Для хранения карзины в куках, я использую json формат. {"1":{"price":1000, "amount":2}}. И что бы очистить корзину, достаточно удалить одну куку.
$menu=MenuModel::where('id','=','1')->get();
В app/start/global.php
В конце файла пишишь
$menu=MenuModel::All();
View::share('menu',$menu);
Теперь переменная $menu будет доступна в любой вьюшке.
Необязательные параметры со значением по умолчанию:
Route::get('user/{name?}', function ($name = 'John') {
return $name;
});
Если перенаправление на mydomain.ru работает, значит mod_rewrite отрабатывает. Значит проблема в базе. Попробуй создать, какой-нибудь левый роут, и посмотри, выгружаются ли данные из базы.
Route::get('left', function(){
$user=Users::All(); // Или как у тебя таблица называется с пользователями....
return View::make('left', ['user'=>$user]);
Делаешь вьюшку left.blade.php
@foreach($user as $vol)
{{ $id }}<br>
{{ username }}<br>
....
...
@endif
Если пустота по адрсу mydomain.ru/left, то проблема с базой.
Можно совсем просто. В классе модели пишешь
protected $fillable=['username','password', 'email'......];
$fillable значит, что поля могут быть заполнены автоматически данными из вьюшки
Потом в роутах
Route::post('/foo', function(){
UserModel::create(Input::all());
return Redirect:to........
Имена полей во вьюшке должны соответствовать именам колонок в mysql.
Самое клевое, что метод create не надо прописывать в модели. Магия
Для update можно сделать тоже самое
Route::post('/foo/{id}', function($id){
UserModel::find($id);
$user->update();
return Redirect::to.....
Могу предположить что проблема в mod_rewrite в apache. Либо нет базы users в mysql. Или логин пароль для базы не правильный, что скорее всего
Спасибо. global.php помог. И View::share тоже.
Добрый день!
Есть сайт, в котором есть меню, мета теги, название сайта, описание и прочее, что должно быть на каждой странице, не зависимо от роута. Все эти данные вытягиваются из mysql. Т.е. меню - это модель, которая наследуется от Eloquent. Название сайта и теги, также хранятся в базе и тоже представляют собой модель. Вопрос? Как вытаскивать эти данные перед любым запросом?
Т. е. есть ли какое-то место в laravel, где можно объявить один раз, например:
$menu=MenuModel::All();
$SiteName=SettingsModel::All();
.....
....
и свободно использовать в любой вьюшке
<div id=header>
$SiteName->name;
</div>
<ul>
<li>$menu->item</li>
</ul>
....
...