$users= User::join("roles","users.roles_id","=","roles.id")->where('users.estado','=',1)->get();$users= User::leftJoin("roles","users.roles_id","=","roles.id")->where('users.estado','=',1)->get();$users= User::join("roles","users.roles_id","=","roles.id")->leftJoin('posts',function($join){$join->on('users.posts_id','=','posts.id')->where('posts.estado','=',1);})->where('users.estado','=',1)->get();$users= User::join("roles","users.roles_id","=","roles.id")->leftJoin(DB::raw("(SELECT * FROM posts where posts.estado=1) as posts"),function($join){$join->on('users.posts_id','=','posts.id');})->where('users.estado','=',1)->get();
Laravel usando Query Builder para generar SQL
Consultas varias
DB::table('users')->whereExists(function($query){$query->select(DB::raw(1))->from('orders')->whereRaw('orders.user_id = users.id');})->get();$users= DB::table('orders')->select('department', DB::raw('SUM(price) as total_sales'))->groupBy('department')->havingRaw('SUM(price) > 2500')->get();
$sql = "SELECT * FROM users WHERE estado=? AND edad<?";
DB::select($sql,array(1,20));
$sql = "SELECT * FROM users WHERE estado=? AND edad<?";
DB::statement($sql,array(1,20));
$sql = "SET FOREIGN_KEY_CHECKS =0;DROP TABLE IF EXISTS `users`;DROP TABLE IF EXISTS `roles`;";
DB::unprepared($sql);
$file_sql = './data/consultas.sql';
$sql = file_get_contents($file_sql);
DB::unprepared($sql);
// Si pierdes la conexión, ejemplo cuando eliminas y vuelves a crear la base de datos, esta función te permite reconectar y seguir trabajando.
DB::reconnect();
Relaciones en Laravel
Convenciones de Eloquent Model
La tabla de un Modelo se le agrega la s, en plural. La tabla de la clase Post sería posts. La tabla de la clase ProductImage sería product_images. El campo primary key de una tabla debe tener el nombre de id, con el atributo AUTO_INCREMENT.
Estructura básica de la clase Post
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Post extends Model
{//}
Dentro de la clase podemos definir diferente a lo predeterminado
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Post extends Model
{// cambiar el nombre de la tablaprotected$table='my_post';// Por defecto id es la clave primaria, podemos definir un campo diferente con la propiedad primaryKeyprotected$primaryKey='id_post';// Todo modelo debe tener 2 campos created_at y updated_at, si no usamos esos campos en nuestra tabla// definimos de la siguiente manerapublic$timestamps=false;// Definir un nombre de conexión diferenteprotected$connection='connection-name';// Atributos que pueden ser asignados en App\Post::create(['name' => 'Article 1']);protected$fillable=['name'];// Todos los atributos se pueden asignar excepto priceprotected$guarded=['price'];}
Uno a Uno
Ejemplo User y Phone estan relacionados uno a uno
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model
{/**
* Get the phone record associated with the user.
*/publicfunction phone(){return$this->hasOne('App\Phone');// Si el id tienen diferentes nombresreturn$this->hasOne('App\Phone','user_id','local_key');}}
Definimos la otra clase
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Phone extends Model
{/**
* Get the user that owns the phone.
*/publicfunction user(){return$this->belongsTo('App\User');// Si el id tienen diferentes nombresreturn$this->belongsTo('App\User','user_id','local_key');}}
Uno a Muchos
Un Post tiene muchos Comentarios
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Post extends Model
{/**
* Get the comments for the blog post.
*/publicfunction comments(){return$this->hasMany('App\Comment');// Si el id tienen diferentes nombresreturn$this->hasMany('App\Comment','post_id','local_key');}}
Un Comentario pertenece a un Post
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Comment extends Model
{/**
* Get the post that owns the comment.
*/publicfunction post(){return$this->belongsTo('App\Post');}}
Muchos a Muchos
Un Usuario tiene varios Roles
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model
{/**
* The roles that belong to the user.
*/publicfunction roles(){return$this->belongsToMany('App\Role');// Si el nombre de la tabla es diferente a lo predeterminado o el ID de la tabla tiene otro nombre.return$this->belongsToMany('App\Role','user_roles','user_id','role_id');}}
Un Rol tiene varios Usuarios
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class Role extends Model
{/**
* The users that belong to the role.
*/publicfunction users(){return$this->belongsToMany('App\User');// Si el nombre de la tabla es diferente a lo predeterminado o el ID de la tabla tiene otro nombre.return$this->belongsToMany('App\User','user_roles','role_id','user_id');}}
Recuperando columnas de tablas intermedias
Definimos en la función withPivot los campos de la tabla intermedia
<?phpnamespace App;use Illuminate\Database\Eloquent\Model;class User extends Model
{publicfunction roles(){return$this->belongsToMany('App\Role','user_roles')->withPivot('create','read','update','delete');}}
$users= User::from('users as a')->join('roles as b',function($join){$join->on('a.roles_id','=','b.id')->where('b.estado','=',1);})->select("a.*","b.name")->where('a.estado','=',1)->get();
Ejemplo: Buscar un término
$search='Palabra a buscar';$posts= Post::from('posts as a')->where(function($query)use($search){$query=$query->orWhere('a.titulo','like',"%$search%");$query=$query->orWhere('a.descripcion','like',"%$search%");$query=$query->orWhere('a.tags','like',"%$search%");});$posts=$posts->where('a.estado','=',1)->get();
Ejemplo: Buscando varias palabras en varias columnas
$columns=['titulo','descripcion','tags'];$term='Palabras a buscar';$words_search=explode(" ",$term);$posts= Post::from('posts as a')->where(function($query)use($columns,$words_search){foreach($words_searchas$word){$query=$query->where(function($query)use($columns,$word){foreach($columnsas$column){$query->orWhere($column,'like',"%$word%");}});}});$posts=$posts->where('a.estado','=',1)->get();
Consultas con prefijo de tabla
En Laravel podemos configurar un prefijo a todas las tablas de nuestra Base de Datos, ese cambio lo realizamos en el archivo config/database.php, en la opción prefix. Si ponemos prefijo_ las tablas se llamarían prefijo_users
Si
realizamos consultas simples no habría ningún problema con este cambio,
pero cuando realizamos consultas complejas usando la función DB::raw es donde tenemos que obtener el prefijo y agregarlo a nuestra consulta. Con esta función obtenemos el prefijo.
$db_prefix= DB::getTablePrefix();
Ahora dentro de la función DB::raw ingresamos el prefijo.
$users= App\User::join("roles","users.roles_id","=","roles.id")->leftJoin(DB::raw("(SELECT * FROM {$db_prefix}posts where {$db_prefix}posts.estado=1) as posts"),function($join){$join->on('users.id','=','posts.users_id');})->select(DB::raw("{$db_prefix}users.*"))->addSelect(DB::raw("DATE_FORMAT({$db_prefix}posts.created_at,'%d/%m/%Y %h:%i %p') AS posts_creado"))->where('users.estado','=',1)->where('posts.comments_count','>',0)->whereRaw(DB::raw("{$db_prefix}posts.tags !=''"))->get();
También tenemos que agregar el prefijo de las tablas cuando usamos consultas SQL puras.
$sql="SELECT * FROM {$db_prefix}users WHERE {$db_prefix}users.estado = ? AND {$db_prefix}users.edad < ?";
DB::select($sql,array(1,20));
Consultas con SubQuery
$sub= Post::select(['id','titulo'])->where('estado','=',1);$count= DB::table( DB::raw("({$sub->toSql()}) as sub"))->mergeBindings($sub->getQuery())->count();
Cuando realizamos consultas a la base de datos haciendo uso de Eloquent, generalmente hacemos uso de las “Where Clauses” para de manera sencilla obtener información según ciertos parámetros, por lo que haremos uso de dicha característica del ORM para ejemplificar el post del día de hoy. Ejemplos: Supongamos que desea filtrar las entradas creadas hoy, o cualquier otro día, podemos hacer lo siguiente: He visto gente haciéndolo con consultas sin procesar , como esta: $q->where(DB::raw("DATE(created_at) = '".date('Ymd')."'")); O sin consultas sin procesar por fecha y hora, así: $q->where('created_at', '>=', date('Ymd').' 00:00:00')); Afortunadamente, Laravel Query Builder ofrece una solución más elocuente : $q->whereDate('created_at', '=', date('Ymd')); En lugar de PHP date() puedes usar Carbon : $q->whereDate('created_at', '=', Carbon::today()-...
JavaScript es un lenguaje de programación de alto nivel que se utiliza principalmente para agregar funcionalidades interactivas a las páginas web. Es uno de los lenguajes de programación más populares y ampliamente utilizados en la actualidad, y se ejecuta en el lado del cliente (es decir, en el navegador web del usuario). JavaScript se utiliza para crear efectos dinámicos en las páginas web, como animaciones, formularios interactivos, menús desplegables, y mucho más. Además, también se puede utilizar para crear aplicaciones web completas y para trabajar con bases de datos y servidores web. En resumen, JavaScript es un lenguaje de programación esencial para cualquier desarrollador web que desee crear sitios y aplicaciones interactivas y dinámicas. Es posible aprender JavaScript jugando videojuegos. Existen muchos juegos educativos y plataformas de aprendizaje en línea que utilizan el lenguaje JavaScript para enseñar programación de manera divertida e interactiva. Estos juegos sue...
Como agregar un reloj a obs Como colocamos un reloj en obs. Primero descargamos el script datetime.lua del siguiente link:: https://obsproject.com/forum/resources/datetime-digital-clock.882/ Lo situamos en la carpeta de script de obs, la cual se encuentra en la siguiente ruta C:\Program Files\obs-studio\data\obs-plugins\frontend-tools\scripts Lo siguiente es quitar la extencion .txt y dejar solo la lua en el script. Después de ello ingresamos a obs, creamos una etiqueta texto y la enlazamos con el escript. Para ello vamos a herramientas, script. Seleccionamos el script que descargamos y lo enlazamos con la etiqueta que creamos. Fin. 1-Agregamos una etiqueta texto y la llamamos reloj:: 1-1 1-2 1-3 2-Descargamos el scripts datetime.lua 2-1 2-2 :El script se descargara con la extensión txt la cual debemos eliminar para que solo que de la extensión .lua 2-3 :El script se descargara con la extensión txt la cual debemos eliminar para que solo que de la extensión .lua 2-4::Si tu...
Comentarios
Publicar un comentario