Im новый в Laravel 4, и сейчас я кодирую небольшой проект, я использую laravel в качестве фреймворка для создания своего сайта, но мой код всегда удивляюсь оптимизации или нет, потому что в моей модели я только что написал:
Категория Модель
public function parents()
{
return $this->belongsTo('Category', 'cat_father');
}
public function children()
{
return $this->hasMany('Category', 'cat_father');
}
}
Модель публикации:
<?php
class Post extends BaseModel{
public $table = "post";
protected $primaryKey = 'idpost';
public function Category()
{
return $this->belongsTo('Category', 'cat_id');
}
}
потому что я не знал, как присоединиться к 2 таблицам в laravel 4, у меня есть условие найти все сообщения из моих категорий, которые он не принадлежал к названию категории "Reunion", но я не знал, как это сделать, поэтому я написал для этой цели 2 строки кода (им не уверен, что написанный код в контроллере - лучший способ, но я не знал, как вызвать метод от модели до контроллера и получить возвращаемое значение)
Мой метод от контроллера для выбора всего сообщения, он не относится к названию категории "Reunion"
public function getAllPostView()
{
$getCat = Category::where('cat_name','=', 'Reunion')->firstOrFail();
$post = Post::where('cat_id', '!=', $getCat->idcategory)->get();
return View::make('layouts.post')->with('post',$post);
}
Мой вопрос, мой код оптимизирован, когда я написал его в контроллере? и как написать его в модели и получить параметр для передачи его контроллеру и использовать его для просмотра. Второй вопрос заключается в том, как заказать "POST", потому что некоторые случаи должны быть заказаны от нового до старого
Вот как вы это делаете:
$exclude = 'Reunion';
$posts = Post::select('posts.*')->join('categories', function ($j) use ($exclude) {
$j->on('posts.cat_id', '=', 'categories.idcategory')
->where('categories.name', '<>', $exclude);
})->get();
может просто использовать простые объединения
public function getAllPostView()
{
$getCat = Category::where('cat_name','=', 'Reunion')
->join('post','post.cat_id', '!=','Category.idcategory')->get();
return View::make('layouts.post')->with('post',$post);
}
Следите за одинаковыми именами полей в обеих таблицах, если это возможно, используя select
$getCat = Category::select('Category.idcategory as cat_id','Category.cat_id as pos_id','many other fields')
// 'as cat_id' not required for unique field names
->join('post','post.cat_id', '!=','Category.idcategory')
->where('cat_name','=', 'Reunion')
->get();
join
: stackoverflow.com/a/23539152/784588