La importancia de les consultes a la base de dades tant en php com en laravel ORM - ELOQUENT.
Un entorn de desenvolupament consisteix en un set d'eines que ens permetin crear, executar i depurar el codi on estem treballant i que ens permeti treballar de manera còmoda i eficient. Un set d'eines recomanat en aquest tutorial consisteix a configurar l'entorn de desenvolupament usant: PHP, Xampp, Vs Code i XDebug
El debug debugging o en espanyol depuració de codi és un procés que consisteix a trobar els possibles errors de codi en programari o maquinari . Els errors són molt comuns quan estem desenvolupant alguna aplicació específicament per a aquest article en PHP (Això passa en tots els llenguatges) i poden ser errors lògics o errors de sintàxis per això cal aprendre com configurar un bon entorn de desenvolupament quan treballem amb PHP ia dia d'avui una de les millors maneres és fer servir XDebug una extensió per a molts editors de codi que ens permet realitzar la tasca de depuració de codi molt més fàcil i en aquest vídeo aprendràs a fer-la servir per a l' editor Visual studio code (VS CODE).
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/"
ServerName localhost
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/voyager_tw/public/"
ServerName voyager_tw.test
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/filament_tw/public/"
ServerName filament_tw.test
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/backpack_tw/public/"
ServerName backpack_tw.test
</VirtualHost>
<VirtualHost *:80>
DocumentRoot "C:/xampp/htdocs/boomerang_back/public/"
ServerName boomerang_back.test
</VirtualHost>
127.0.0.1 localhost ::1 localhost 127.0.0.1 filament_tw.test 127.0.0.1 backpack_tw.test 127.0.0.1 voyager_tw.test 127.0.0.1 boomerang_back.test
CONFIGURAR EXTENSIONS PHP PER A LARAVEL ====================================== descomentar a la linia 920 del fitxer C:\xampp\php\php.ini
extension=gd
extension=intl
extension=zip
<?php
$servername = "localhost";
$username = "root";
$password = "";
$dbname = "estudi";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "SELECT * FROM `codes` order by categoria asc";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
?>
<!-- element que vull repetir -->
<?php echo "$row[nom]";?>
<?php }
} else {
echo "0 results";
}
$conn->close();
?>
<!-- Section 2 -->
<section class="h-25 bg-white"style="background-image: url('liniesobjectiu.png'); background-repeat: no-repeat;">
<!--Replace with your tailwind.css once created-->
<!--Regular Datatables CSS-->
<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet">
<!--Responsive Extension Datatables CSS-->
<link href="https://cdn.datatables.net/responsive/2.2.3/css/responsive.dataTables.min.css" rel="stylesheet">
<style>
/*Overrides for Tailwind CSS */
/*Form fields*/
.dataTables_wrapper select,
.dataTables_wrapper .dataTables_filter input {
color: #4a5568;
/*text-gray-700*/
padding-left: 1rem;
/*pl-4*/
padding-right: 1rem;
/*pl-4*/
padding-top: .5rem;
/*pl-2*/
padding-bottom: .5rem;
/*pl-2*/
line-height: 1.25;
/*leading-tight*/
border-width: 2px;
/*border-2*/
border-radius: .25rem;
border-color: #edf2f7;
/*border-gray-200*/
background-color: #edf2f7;
/*bg-gray-200*/
}
/*Row Hover*/
table.dataTable.hover tbody tr:hover,
table.dataTable.display tbody tr:hover {
background-color: #ebf4ff;
/*bg-indigo-100*/
}
/*Pagination Buttons*/
.dataTables_wrapper .dataTables_paginate .paginate_button {
font-weight: 700;
/*font-bold*/
border-radius: .25rem;
/*rounded*/
border: 1px solid transparent;
/*border border-transparent*/
}
/*Pagination Buttons - Current selected */
.dataTables_wrapper .dataTables_paginate .paginate_button.current {
color: #fff !important;
/*text-white*/
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06);
/*shadow*/
font-weight: 700;
/*font-bold*/
border-radius: .25rem;
/*rounded*/
background: #667eea !important;
/*bg-indigo-500*/
border: 1px solid transparent;
/*border border-transparent*/
}
/*Pagination Buttons - Hover */
.dataTables_wrapper .dataTables_paginate .paginate_button:hover {
color: #fff !important;
/*text-white*/
box-shadow: 0 1px 3px 0 rgba(0, 0, 0, .1), 0 1px 2px 0 rgba(0, 0, 0, .06);
/*shadow*/
font-weight: 700;
/*font-bold*/
border-radius: .25rem;
/*rounded*/
background: #667eea !important;
/*bg-indigo-500*/
border: 1px solid transparent;
/*border border-transparent*/
}
/*Add padding to bottom border */
table.dataTable.no-footer {
border-bottom: 1px solid #e2e8f0;
/*border-b-1 border-gray-300*/
margin-top: 0.75em;
margin-bottom: 0.75em;
}
/*Change colour of responsive icon*/
table.dataTable.dtr-inline.collapsed>tbody>tr>td:first-child:before,
table.dataTable.dtr-inline.collapsed>tbody>tr>th:first-child:before {
background-color: #667eea !important;
/*bg-indigo-500*/
}
</style>
<!--Container-->
<div class="container w-full md:w-4/5 xl:w-3/5 mx-auto px-2">
<h1 class="mb-6 text-4xl font-extrabold leading-none max-w-5xl mx-auto tracking-normal text-gray-900 sm:text-5xl md:text-5xl lg:text-5xl md:tracking-tight"> Aqui <span class="w-full text-transparent bg-clip-text bg-gradient-to-r from-green-400 via-blue-500 to-purple-500 lg:inline">Tinc una llista de objectius</span> que: <br class="lg:block hidden"> em fa falta ajuda per aconseguir!. </h1>
<!--Card-->
<div id='recipients' class="p-8 mt-6 lg:mt-0 rounded shadow bg-white">
<table id="example" class="stripe hover" style="width:100%; padding-top: 1em; padding-bottom: 1em;">
<thead>
<tr>
<th data-priority="1">nom</th>
<th data-priority="2">descripcio</th>
<th data-priority="5">Start date</th>
<th data-priority="6">status</th>
<th data-priority="6"> sol.lucio</th>
<th data-priority="5">final date</th>
</tr>
</thead>
<tbody>
<tr>
<td>register</td>
<td>incorporar altres usuaris i rols per col.laboracions e inclus mes endevant suscripcions</td>
<td>04/08/2022</td>
<td> <span class="uk-text-danger" uk-icon="icon: close; ratio: 3.5"></span></td>
<td><a href="#">pendent</a></span></td>
<td>-</td>
</tr>
<!-- Rest of your data (refer to https://datatables.net/examples/server_side/ for server side processing)-->
<tr>
<td>Administracio</td>
<td>operacions crud per l'administrador</td>
<td>04/08/2022</td>
<td> <span class="uk-text-success" uk-icon="icon: check; ratio: 3.5"></span></td>
<td><a href="#">voyager</a></span></td>
<td>04/08/2022</td>
</tr>
</tbody>
</table>
</div>
<!--/Card-->
</div>
<!--/container-->
<!-- jQuery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<!--Datatables -->
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.2.3/js/dataTables.responsive.min.js"></script>
<script>
$(document).ready(function() {
var table = $('#example').DataTable({
responsive: true
})
.columns.adjust()
.responsive.recalc();
});
</script>
</section>
//crear MIGRACIO MODEL i CONTROLADOR per a la taula Codes
//en singular code i creara taula en plural
php artisan make:model Code -mcr
<?php
use Illuminate\Database\Migrations\Migration;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Support\Facades\Schema;
class CreateCodesTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('codes', function (Blueprint $table) {
$table->id();
$table->string('nom', 255);
$table->string('slug', 255)->unique();
$table->string('descripcio', 500)->nullable();
$table->longText('blockcode')->nullable();
$table->string('category_id');
$table->string('tag_id');
$table->string('youtube', 255)->nullable();
$table->string('web', 255)->nullable();
$table->string('txt', 255)->nullable();
$table->timestamps();
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('codes');
}
}
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
/**
* Migration auto-generated by TablePlus 4.10.1(202)
* @author https://tableplus.com
* @source https://github.com/TablePlus/tabledump
*/
class CreateObjectiusTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('objectius', function (Blueprint $table) {
$table->integer('id')->unsigned()->autoIncrement();
$table->string('nom', 255);
$table->text('descripcio');
$table->string('status', 255);
$table->string('urlsolucio', 255)->nullable()->default(NULL);
$table->timestamp('created_at')->nullable()->default(NULL);
$table->timestamp('updated_at')->nullable()->default(NULL);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('objectius');
}
}
CREAR MIGRACIO
php artisan make:migration create_people_table
EDITAR MIGRACIO
<?php
use Illuminate\Support\Facades\Schema;
use Illuminate\Database\Schema\Blueprint;
use Illuminate\Database\Migrations\Migration;
/**
* Migration auto-generated by TablePlus 4.10.1(202)
* @author https://tableplus.com
* @source https://github.com/TablePlus/tabledump
*/
class CreatePeopleTable extends Migration
{
/**
* Run the migrations.
*
* @return void
*/
public function up()
{
Schema::create('people', function (Blueprint $table) {
$table->integer('id')->unsigned()->autoIncrement();
$table->string('nom', 255);
$table->string('img', 255);
$table->string('categoria', 255);
$table->string('vestit', 255)->nullable()->default(NULL);
$table->string('cabell', 255)->nullable()->default(NULL);
$table->string('origen', 255)->nullable()->default(NULL);
$table->string('folder', 255)->nullable()->default(NULL);
$table->string('ins', 255)->nullable()->default(NULL);
$table->string('face', 255)->nullable()->default(NULL);
$table->string('mp3', 255)->nullable()->default(NULL);
$table->timestamp('created_at')->nullable()->default(NULL);
$table->timestamp('updated_at')->nullable()->default(NULL);
$table->string('web', 255)->nullable()->default(NULL);
});
}
/**
* Reverse the migrations.
*
* @return void
*/
public function down()
{
Schema::dropIfExists('people');
}
}
EXECUTAR MIGRACIO
php artisan migrate
php artisan make:migration create_codes_table
Joan recorda que els motors de dades que suporta Laravel són:MySQL, Postgres, SQLite, SQL Server. La configuració d'aquests motors són a /config/database.php.
La taula migrations que es crea a la base de dades, és la que manté l'historial de les migracions i controla quines migracions executar i quin no. (Depèn de l'ordre que executis a la consola)
L'ordre ens mostra la llista completa d'ordres de Laravel.
php artisan list
Per crear taula migrations
php artisan migrate:install
Si executeu una migració d'una taula i no existeix la taula migració , serà creada automàticament. Per esborrar totes les taules de la base de dades i després tornar-les a crear:
php artisan migrate:refresh
Per eliminar totes les taules
php artisan migrate:reset
php artisan migrate:rollback
php artisan migrate:status
php artisan make:migration create_codes_table
<?php use Illuminate\Support\Facades\Schema; use Illuminate\Database\Schema\Blueprint; use Illuminate\Database\Migrations\Migration; /** * Migration auto-generated by TablePlus 5.0.4(214) * @author https://tableplus.com * @source https://github.com/TablePlus/tabledump */ class CreateCodesTable extends Migration { /** * Run the migrations. * * @return void */ public function up() { Schema::create('codes', function (Blueprint $table) { $table->integer('id')->unsigned()->autoIncrement(); $table->string('nom', 255); $table->string('slug', 255)->nullable()->default(NULL); $table->string('descripcio', 500)->nullable()->default(NULL); $table->longtext('blockcode')->nullable()->default(NULL); $table->bigInteger('category_id')->nullable()->default(NULL); $table->bigInteger('subcategory_id')->nullable()->default(NULL); $table->string('youtube', 255)->nullable()->default(NULL); $table->string('url', 255)->nullable()->default(NULL); $table->timestamp('created_at')->nullable()->default(NULL); $table->timestamp('updated_at')->nullable()->default(NULL); }); } /** * Reverse the migrations. * * @return void */ public function down() { Schema::dropIfExists('codes'); } }
LOCALHOST
php artisan storage:link
SERVIDOR COMPARTIT
solucio: eliminar la carpeta storage de public i afegir ruta nova i executarla.
es mostrara una pagina en blanc i el acces directe estara creat.
Route::get('/linkstorage', function () {
Artisan::call('storage:link');
});
Route::get('/', function()
{
$builds = DB::table('blogs')->where('frontpage', '1')
->orderBy('id', 'desc')
->paginate(20);
return View::make('pages/home')->with('builds', $builds);
});
Porta tots esl registres amb una variable.
Route::get('/people', function () {
$persons = App\Person::all();
return view('people', compact('persons'));
});
JOIN amb dues taulas i porta dues variables
Route::get('/inici', function () {
$title_page = "els apunts del jubilat ";
$posts = Post::select(
"blog_posts.id",
"blog_posts.title",
"blog_posts.excerpt",
"blog_posts.banner",
"blog_posts.content",
"blog_categories.name as lacategoria"
)
->join("blog_categories", "blog_categories.id", "=", "blog_category_id")
->get();
return view('inici', compact('title_page', 'posts'));
});
<!-- FANCYBOX 4 CSS AL HEAD --> <link rel="stylesheet"href="https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.css"/> <!-- FANCYBOX 4 JS AL FINAL BODY --> <script src="https://cdn.jsdelivr.net/npm/@fancyapps/ui@4.0/dist/fancybox.umd.js"></script> <!-- Imatge en gallery al body --> <a data-fancybox="gallery" data-src="storage/{{$person->img}}"><img src="storage/{{$person->img}}" /></a>
VIDEO
<!-- HTML5 video custom dimensions --> <a data-fancybox="video-gallery" href="/img/video.mp4" data-width="640" data-height="360"> <img src="/img/video.jpeg" width="200" height="150" /> </a> <!-- YouTube --> <a data-fancybox="video-gallery" href="https://www.youtube.com/watch?v=z2X2HaTvkl8"> <img src="http://i3.ytimg.com/vi/z2X2HaTvkl8/hqdefault.jpg" width="200" height="150" /> </a> <!-- YouTube custom start time --> <a data-fancybox="video-gallery" href="https://www.youtube.com/watch?v=dZRqB0JLizw&t=40s"> <img src="http://i3.ytimg.com/vi/dZRqB0JLizw/hqdefault.jpg" width="200" height="150" /> </a> <!-- Vimeo --> <a data-fancybox="video-gallery" href="https://vimeo.com/259411563"> <img src="https://f.vimeocdn.com/images_v6/lohp/video1_thumbnail.png" width="200" height="150" /> </a> <!-- Vimeo custom start time --> <a data-fancybox="video-gallery" href="https://vimeo.com/577635596#t=11m11s"> <img src="https://i.vimeocdn.com/video/1194909913-14ae3f936b19d7106adf7bf7c04d557aaa5941dcf445e0b004c3c9e060b4b0ae-d?mw=700&mh=393&q=70" width="200" height="150" /> </a>
IFRAME
<a href="iframe.html" data-fancybox data-type="iframe">
Defaults
</a>
<a
href="iframe.html"
data-fancybox
data-type="iframe"
data-preload="false"
>
Preloading is disabled
</a>
<a
href="iframe.html"
data-fancybox
data-type="iframe"
data-width="300"
data-height="400"
>
Custom width and height
</a>
<a
href="data:text/html,<p>Some HTML</p>"
data-fancybox
data-type="iframe"
>
Dynamic iframe content
</a>
<a data-fancybox data-type="pdf" href="your.pdf">
PDF file
</a>
IMATGE
<a
data-fancybox="gallery"
data-src="https://lipsum.app/id/2/1024x768"
data-caption="Optional caption,<br />that can contain <em>HTML</em> code"
>
<img src="https://lipsum.app/id/2/200x150" />
</a>
<a data-fancybox="gallery" data-src="https://lipsum.app/id/3/1024x768">
<img src="https://lipsum.app/id/3/200x150" />
</a>
<a data-fancybox="gallery" data-src="https://lipsum.app/id/4/1024x768">
<img src="https://lipsum.app/id/4/200x150" />
</a>
Route::get('/people', function () {
$persons = DB::select("SELECT * FROM `people` WHERE `categoria` IN ('photographers', 'painters', 'influencers', 'music'); ");
return view('people', compact('persons'));
});
Route::get('/dashboard', function()
{
$persons = DB::table('people')->where('categoria', 'models')
->orderBy('id', 'desc')
->paginate(20);
return View::make('dashboard')->with('persons', $persons);
})->name('dashboard');
laravel new estudijoanpuig --jet
npm install
npm run build
npm run dev
php artisan migrate
composer require tcg/voyager
php artisan voyager:install --with-dummy
php artisan voyager:admin joanpuigbertran@gmail.com --create
<meta> Les etiquetes sempre van dins de l'element <head> i s'utilitzen normalment per especificar el conjunt de caràcters, la descripció de la pàgina, les paraules clau, l'autor del document i la configuració de la finestra gràfica.
Les metadades no es mostraran a la pàgina, però es poden analitzar per màquina.
Les metadades les fan servir els navegadors (com mostrar el contingut o tornar a carregar la pàgina), els motors de cerca (paraules clau) i altres serveis web.
<meta name="description" content="sale of watercolors">
<meta name="keywords" content="watercolors, laravel, livewire, Wordpress, painting, estudijoanpuig">
<meta name="author" content="Joan Puig Bertran">
//crear un recurs per al App\Models\Person.php://
php artisan make:filament-resource Person
//aixo creara varis fitxers i directori//
+-- PersonResource.php
+-- PersonResource
| +-- Pages
| | +-- CreatePerson.php
| | +-- EditPerson.php
| | +-- ListPerson.php
//Per crear un recurs per al App\Models\code.php:
php artisan make:filament-resource Code
//Això crearà diversos fitxers al app/Filament/Resourcesdirectori:
.
+-- CodeResource.php
+-- CodeResource
| +-- Pages
| | +-- CreateCode.php
| | +-- EditCode.php
| | +-- ListCode.php
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\CodeResource\Pages;
use App\Filament\Resources\CodeResource\RelationManagers;
use App\Models\Code;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
use Closure;
use Filament\Forms\Components\TextInput;
use Illuminate\Support\Str;
use Filament\Forms\Components\RichEditor;
use Filament\Forms\Components\MarkdownEditor;
use Filament\Forms\Components\Select;
class CodeResource extends Resource
{
protected static ?string $model = Code::class;
protected static ?string $navigationIcon = 'heroicon-o-code';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\TextInput::make('nom')
->required()
->reactive()
->afterStateUpdated(function (Closure $set, $state) {
$set('slug', Str::slug($state));
}),
Forms\Components\TextInput::make('slug'),
Forms\Components\RichEditor::make('descripcio')
->columnSpan('full'),
Forms\Components\MarkdownEditor::make('blockcode')
->columnSpan('full'),
Forms\Components\Select::make('category_id')
->relationship('category', 'category_nom'),
Forms\Components\Select::make('tag_id')
->relationship('tag', 'tag_nom'),
Forms\Components\TextInput::make('youtube')
->maxLength(255),
Forms\Components\TextInput::make('web')
->maxLength(255),
Forms\Components\TextInput::make('txt')
->maxLength(255),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\TextColumn::make('id')->searchable()->sortable(),
Tables\Columns\TextColumn::make('nom')->searchable()->limit('30')->sortable(),
Tables\Columns\TextColumn::make('category_id')->limit('3')->searchable()->sortable(),
Tables\Columns\TextColumn::make('descripcio')->limit('10')->searchable()->sortable(),
Tables\Columns\TextColumn::make('tag_id')->limit('3')->searchable()->sortable(),
Tables\Columns\TextColumn::make('youtube')->limit('10'),
Tables\Columns\TextColumn::make('web')->limit('10'),
Tables\Columns\TextColumn::make('txt')->limit('10'),
Tables\Columns\TextColumn::make('slug')->limit('6')->searchable()->sortable(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListCodes::route('/'),
'create' => Pages\CreateCode::route('/create'),
'edit' => Pages\EditCode::route('/{record}/edit'),
];
}
}
web resource per filament amb select e imatges
<?php
namespace App\Filament\Resources;
use App\Filament\Resources\WebResource\Pages;
use App\Filament\Resources\WebResource\RelationManagers;
use App\Models\Web;
use Filament\Forms;
use Filament\Resources\Form;
use Filament\Resources\Resource;
use Filament\Resources\Table;
use Filament\Tables;
use Illuminate\Database\Eloquent\Builder;
use Illuminate\Database\Eloquent\SoftDeletingScope;
class WebResource extends Resource
{
protected static ?string $model = Web::class;
protected static ?string $navigationIcon = 'heroicon-o-collection';
public static function form(Form $form): Form
{
return $form
->schema([
Forms\Components\FileUpload::make('img'),
Forms\Components\TextInput::make('nom')
->required()
->maxLength(255),
Forms\Components\TextInput::make('descripcio')
->maxLength(255),
Forms\Components\Select::make('categoria')
->options([
'multipage' => 'multipage',
'panel' => 'panel',
'php' => 'php',
'html' => 'html',
'localhost' => 'localhost',
]),
Forms\Components\Select::make('css')
->options([
'bootstrap' => 'bootstrap',
'tailwind' => 'tailwind',
'uikit' => 'uikit',
]),
Forms\Components\Select::make('framework')
->options([
'laravel' => 'laravel',
'wordpress' => 'wordpress',
'codeigniter' => 'codeigniter',
'php' => 'php',
]),
Forms\Components\TextInput::make('url')
->required()
->maxLength(255),
Forms\Components\TextInput::make('download')
->maxLength(255),
Forms\Components\Select::make('servidor')
->options([
'localhost' => 'localhost',
'hostinger' => 'hostinger',
'github' => 'github',
'synology' => 'synology',
]),
]);
}
public static function table(Table $table): Table
{
return $table
->columns([
Tables\Columns\ImageColumn::make('img'),
Tables\Columns\TextColumn::make('nom')
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('descripcio')
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('categoria')
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('framework')
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('url'),
Tables\Columns\TextColumn::make('download'),
Tables\Columns\TextColumn::make('servidor')
->searchable()
->sortable(),
Tables\Columns\TextColumn::make('created_at')
->dateTime(),
Tables\Columns\TextColumn::make('updated_at')
->dateTime(),
])
->filters([
//
])
->actions([
Tables\Actions\EditAction::make(),
])
->bulkActions([
Tables\Actions\DeleteBulkAction::make(),
]);
}
public static function getRelations(): array
{
return [
//
];
}
public static function getPages(): array
{
return [
'index' => Pages\ListWebs::route('/'),
'create' => Pages\CreateWeb::route('/create'),
'edit' => Pages\EditWeb::route('/{record}/edit'),
];
}
}
1/** app\Http\Controllers\BlogPostsController.php (consulta dues taules unirles per categoria) */
public function index()
{
$blog_posts = blog_posts::select(
"blog_posts.title",
"blog_posts.banner",
"blog_posts.excerpt",
"blog_posts.published_at",
"blog_categories.name as name"
)
->join("blog_categories", "blog_categories.id", "=", "blog_posts.blog_category_id")
->get();
return view('gallery_posts', compact('blog_posts'));
}
2/** routes/web.php */
Route::get('/gallery_posts','App\Http\Controllers\BlogPostsController@index');
3/**resources\views\gallery_posts.blade.php */
@foreach ($blog_posts as $blog_post)
<!-- card -->
<div class="{{$blog_post->name}}" data-tags="a beautiful landscape - nature outdoor">
<div class="uk-card uk-card-small uk-card-default">
<div class="uk-card-header">
<div class="uk-grid uk-grid-small uk-text-small" data-uk-grid>
<div class="uk-width-expand">
<span class="cat-txt">{{$blog_post->name}}</span>
</div>
<div class="uk-width-auto uk-text-right uk-text-muted">
</div>
</div>
</div>
<div class="uk-card-media">
<div class="uk-inline-clip uk-transition-toggle" tabindex="0">
<img data-fancybox="gallery" src="storage/{{$blog_post->banner
}}" >
<div class="uk-transition-slide-bottom uk-position-bottom uk-overlay uk-overlay-primary">
<span data-uk-icon="icon:heart; ratio: 0.8"></span> 12.345 <span data-uk-icon="icon:comment; ratio: 0.8"></span> 12.345
</div>
</div>
</div>
<div class="uk-card-body">
<h6 class="uk-margin-small-bottom uk-margin-remove-adjacent uk-text-bold">{{$blog_post->title}}</h6>
<p class="uk-text-small uk-text-muted">{{$blog_post->excerpt}}</p>
</div>
<div class="uk-card-footer">
<div class="uk-grid uk-grid-small uk-grid-divider uk-flex uk-flex-middle" data-uk-grid>
<div class="uk-width-expand uk-text-small">
lleigeix mes
</div>
<div class="uk-width-auto uk-text-right">
<a href="#" data-uk-tooltip="title: Twitter" class="uk-icon-link" data-uk-icon="icon:twitter; ratio: 0.8"></a>
<a href="#" data-uk-tooltip="title: Instagram" class="uk-icon-link" data-uk-icon="icon:instagram; ratio: 0.8"></a>
<a href="#" data-uk-tooltip="title: Behance" class="uk-icon-link" data-uk-icon="icon:behance; ratio: 0.8"></a>
<a href="#" data-uk-tooltip="title: Pinterest" class="uk-icon-link" data-uk-icon="icon:pinterest; ratio: 0.8"></a>
</div>
<div class="uk-width-auto uk-text-right">
<a data-uk-tooltip="title: Drag this card" href="#" class="uk-icon-link drag-icon" data-uk-icon="icon:move; ratio: 1"></a>
</div>
</div>
</div>
</div>
</div>
<!-- /card -->
@endforeach
php artisan tinker
App\Models\User::factory(50)->create();
UPDATE codes SET category_id = null;
Connexió amb la base de dades a la propia consulta
<?php $servername = "localhost"; $username = "root"; $password = ""; $dbname = "backpack_tw"; // Create connection $conn = new mysqli($servername, $username, $password, $dbname); // Check connection if ($conn->connect_error) { die("Connection failed: " . $conn->connect_error); } $sql = "select `people`.`id`, `people`.`nom`, `people`.`img`, `people`.`updated_at`, `people`.`web`,`people`.`ins`, `people`.`face`,`people`.`mp3`, `categories`.`category_nom` as `ggg` from `people` inner join `categories` on `categories`.`id` = `people`.`category_id`"; $result = $conn->query($sql); if ($result->num_rows > 0) { // output data of each row while($row = $result->fetch_assoc()) { ?> //element a repetir storage/<?php echo "$row[img]";?> <?php } } else { echo "0 results"; } $conn->close(); ?>
Connexió amb la base de dades amb fitxer preparat.
Per poder connectar-nos amb la base de dades farem servir el llenguatge PHP. A continuació, mostrarem un exemple.
<? php // Configuració necessària per accedir a la data base. $hostname = "localhost" ; $usuariodb = "root" ; $passworddb = "root" ; $dbname = "php_innerjoin" ; // Generant la connexió amb el servidor $connectar = mysqli_connect ( $hostname , $usuariodb , $passworddb , $dbname ); ?>
Consulta per executar la sentència
Aquesta secció és molt important perquè aquí farem la consulta SQL que ens tornarà els registres desitjats en concatenar dues taules amb dades relacionades.
<? php //Seleccionar us itens dóna pàgina $sql = "SELECT espècie.Nom, animals.Animals FROM espècie INNER JOIN animals ON espècie.id=animals.IdEspecie where animales.IdEspecie=1" ; $resultat = mysqli_query ( $connectar , $sql ); ?>
composer require filament/filament:"^2.0"
php artisan make:filament-user
composer require doctrine/dbal --dev
php artisan make:filament-resource User --generate
Volem relacionar: posts.category_id amb categories.category_nom i tambe posts.tag_id amb tags.tag_nom
//vaig a app\Models\Post.php i al final poso el codi...
public function category()
{
return $this->belongsTo(Category::class);
}
public function tags()
{
return $this->belongsToMany(Tag::class);
}
//Instal·leu el connector amb Composer:
composer require filament/spatie-laravel-media-library-plugin:"^2.0"
//Si encara no ho heu fet, heu de publicar la migració per crear la taula multimèdia:
php artisan vendor:publish --provider="Spatie\MediaLibrary\MediaLibraryServiceProvider" --tag="migrations"
//Executeu les migracions:
php artisan migrate
Per exemple, el formulari pot redirigir de nou a la pàgina Llista :
//incorporar aquesta funcio en el MODEL de la taula que insertem dades
protected function getRedirectUrl(): string
{
return $this->getResource()::getUrl('index');
}
El tema de JOINS és probablement una de les característiques més poderoses que usen els Gestors de Bases de dades relacionals, doncs amb ells podem extreure informació des de 2, fins a una quantitat de taules segons ho necessitem; sempre que aquestes estiguin vinculades entre si per claus foranes.
//CONSULTA INNER JOIN AL CONTROLADOR...
// app\Http\Controllers\GamesContoller.php
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Code;
class GamesController extends Controller
{
public function index()
{
$codes = Code::select(
"codes.id",
"codes.nom",
"codes.descripcio",
"codes.youtube",
"codes.web",
"codes.tag_id",
"codes.txt",
"codes.slug",
"categories.category_nom as lacategoria",
"tags.tag_nom as eltag"
)
->join("categories", "categories.id", "=", "category_id")
->join("tags", "tags.id", "=", "tag_id")
->get();
return view('welcome', compact('codes'));
}
}
//ROUTE AL ARXIU: web.php
Route::get('/', [GamesController::class, 'index']);
//VISTA per a mostrar els resultats en una taula
<table id="example" class="stripe hover" style="width:100%; padding-top: 1em; padding-bottom: 1em;">
<thead>
<tr>
<th data-priority="1">id</th>
<th data-priority="2">nom</th>
<th data-priority="3">descripcio</th>
<th data-priority="4">category</th>
<th data-priority="5">tag</th>
<th data-priority="6">youtube</th>
<th data-priority="7">web</th>
<th data-priority="8">txt</th>
</tr>
</thead>
<tbody>
@foreach ($codes as $code)
<tr>
<td>{{$code->id}}</td>
<td>
<a href="/detall_codi/{{$code->id}}" data-fancybox data-type="iframe">
{{$code->nom}}
</a>
</td>
<td>{!! $code->descripcio !!}</td>
<td> {{$code->lacategoria}}</td>
<td> {{$code->eltag}}</td>
<td><a data-fancybox="video-gallery"href="{{$code->youtube}}" uk-icon="icon: youtube"></a></td>
<td><a href="{{$code->web}}" uk-icon="icon: world"target="_blank"></a></td>
<td><a data-fancybox data-type="iframe" href="embed/{{$code->txt}}" uk-icon="icon: file-text"></a></span></td>
</tr>
@endforeach
</tbody>
</table>
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Code;
class MysqlController extends Controller
{
public function index()
{
$codes = Code::select(
"codes.id",
"codes.nom",
"codes.descripcio",
"codes.youtube",
"codes.web",
"codes.tag_id",
"codes.txt",
"codes.slug",
"categories.category_nom as lacategoria",
"tags.tag_nom as eltag"
)
->join("categories", "categories.id", "=", "category_id")
->join("tags", "tags.id", "=", "tag_id")
->where("category_id", "=", "9")
->get();
return view('mysql', compact('codes'));
}
}
//sintaxi al controlador
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Code;
class LaravelController extends Controller
{
public function index()
{
$codes = Code::select(
"codes.id",
"codes.nom",
"codes.descripcio",
"codes.youtube",
"codes.web",
"codes.tag_id",
"codes.txt",
"codes.slug",
"categories.category_nom as lacategoria",
"tags.tag_nom as eltag"
)
->join("categories", "categories.id", "=", "category_id")
->join("tags", "tags.id", "=", "tag_id")
->where("category_id", "=", "7")
->get();
return view('filament', compact('codes'));
}
}
//sintaxi a routes\web.php
use App\Http\Controllers\LaravelController;
Route::get('/laravel', [LaravelController::class, 'index']);
//sintaxi a la vista
@foreach ($codes as $code)
<tr>
<td>{{$code->id}}</td>
<td>
<a href="/detall_codi/{{$code->id}}" data-fancybox data-type="iframe">
{{$code->nom}}
</a>
</td>
<td>{!! $code->descripcio !!}</td>
<td> {{$code->lacategoria}}</td>
<td> {{$code->eltag}}</td>
<td><a data-fancybox="video-gallery"href="{{$code->youtube}}" uk-icon="icon: youtube"></a></td>
<td><a href="{{$code->web}}" uk-icon="icon: world"target="_blank"></a></td>
<td><a data-fancybox data-type="iframe" href="embed/{{$code->txt}}" uk-icon="icon: file-text"></a></span></td>
</tr>
@endforeach
Resaltar que faig us de: use App\Models\Code;
per cridar el model que controla aquesta taula
<?php
namespace App\Http\Controllers;
use App\Http\Controllers\Controller;
use Illuminate\Http\Request;
use App\Models\Code;
class GamesController extends Controller
{
public function index()
{
$codes = Code::select(
"codes.id",
"codes.nom",
"codes.descripcio",
"codes.youtube",
"codes.web",
"codes.tag_id",
"codes.txt",
"codes.slug",
"categories.category_nom as lacategoria",
"tags.tag_nom as eltag"
)
->join("categories", "categories.id", "=", "category_id")
->join("tags", "tags.id", "=", "tag_id")
->get();
return view('welcome', compact('codes'));
}
}
Aquesta pagina es una llista de tots els temes dels que vull ampliar informacio. Ruta administradxa per controlador PageController.
Route::get('/page', [PageController::class, 'index']);
@extends('layouts.main')
@section('content')
<section class="px-2 py-4 bg-white md:px-0">
<div class="container items-center max-w-6xl px-8 mx-auto xl:px-5">
<div class="flex flex-wrap items-center sm:-mx-3">
<div class="w-full md:w-1/2 md:px-3">
<div class="w-full pb-3 space-y-6 sm:max-w-md lg:max-w-lg md:space-y-4 lg:space-y-8 xl:space-y-9 sm:pr-5 lg:pr-0 md:pb-0">
<h1 class="text-3xl font-extrabold tracking-tight text-gray-900 sm:text-4xl md:text-3xl lg:text-4xl xl:text-5xl">
<span class="block xl:inline">Llista pagines</span>
<span class="block text-indigo-600 xl:inline font-extrabold text-transparent text-6xl bg-clip-text bg-gradient-to-r from-purple-400 to-pink-600" data-primary="indigo-600">d'aquest lloc</span>
</h1>
<p class="mx-auto text-base text-gray-500 sm:max-w-md lg:text-xl md:max-w-3xl tails-relative">Aquesta llista i la seva funcio m'ha portat a un altre mon....</p>
<div class="tails-hover-element">
<pre>
<code id="htmlViewer" style="color:rgb(248, 248, 242); font-weight:400;background-color:rgb(43, 43, 43);background:rgb(43, 43, 43);display:block;padding: .5em;"><span style="color:rgb(212, 208, 171); font-weight:400;">//la ruta a web.php</span>
Route::<span style="color:rgb(220, 198, 224); font-weight:400;">get</span>(<span style="color:rgb(171, 227, 56); font-weight:400;">'/page'</span>, [PageController::<span style="color:rgb(248, 248, 242); font-weight:400;"><span style="color:rgb(220, 198, 224); font-weight:400;">class</span>, <span style="color:rgb(245, 171, 53); font-weight:400;">'index']);</span></span>
</code></pre>
</div><p></p>
<div class="relative flex flex-col sm:flex-row sm:space-x-4">
<a href="/detall_codi/121" data-fancybox data-type="iframe" class="flex items-center w-full px-6 py-2 mb-3 text-lg text-white bg-indigo-600 rounded-md sm:mb-0 hover:bg-indigo-700 sm:w-auto" data-primary="indigo-600" data-rounded="rounded-md">
CONTROLADOR
<svg xmlns="http://www.w3.org/2000/svg" class="w-5 h-5 ml-1" viewBox="0 0 24 24" fill="none" stroke="currentColor" stroke-width="2" stroke-linecap="round" stroke-linejoin="round"><line x1="5" y1="12" x2="19" y2="12"></line><polyline points="12 5 19 12 12 19"></polyline></svg>
</a>
<a href="#_" class="flex items-center px-6 py-3 text-gray-500 bg-gray-100 rounded-md hover:bg-gray-200 hover:text-gray-600" data-rounded="rounded-md">
VISTA
</a>
</div>
</div>
</div>
<div class="w-full md:w-1/2">
<div class="w-full h-auto overflow-hidden rounded-md shadow-xl sm:rounded-xl" data-rounded="rounded-xl" data-rounded-max="rounded-full">
<img src="{{ asset('img/hero/12.png') }}" class="">
</div>
</div>
</div>
</div>
</section>
<link href="https://cdn.datatables.net/1.10.19/css/jquery.dataTables.min.css" rel="stylesheet">
<!--Responsive Extension Datatables CSS-->
<link href="https://cdn.datatables.net/responsive/2.2.3/css/responsive.dataTables.min.css" rel="stylesheet">
<div class="container w-full mx-auto px-1">
<!--Card-->
<div id='recipients' class="p-8 mt-6 lg:mt-0 rounded shadow bg-white">
<table id="example" class="stripe hover" style="width:100%; padding-top: 1em; padding-bottom: 1em;">
<thead>
<tr>
<th data-priority="1">id</th>
<th data-priority="2">img_hero</th>
<th data-priority="7">ANAR.HI</th>
<th data-priority="3">title</th>
<th data-priority="4">title2</th>
<th data-priority="5">subtitle</th>
</tr>
</thead>
<tbody>
@foreach ($pages as $page)
<tr>
<td>{{$page->id}}</td>
<td><img data-fancybox="gallery" src="storage/{!! $page->img_hero !!}" width="100"></td>
<td><a class="text-lg text-red-500 uppercase font-bold"href="/detall_page/{{$page->id}}">{{$page->lacategoria}}</a></td>
<td>{{$page->title}}</td>
<td>{{$page->title2}}</td>
<td>{!! $page->subtitle !!}</td>
</tr>
@endforeach
</tbody>
</table>
</div>
</div>
<!-- jQuery -->
<script type="text/javascript" src="https://code.jquery.com/jquery-3.4.1.min.js"></script>
<!--Datatables -->
<script src="https://cdn.datatables.net/1.10.19/js/jquery.dataTables.min.js"></script>
<script src="https://cdn.datatables.net/responsive/2.2.3/js/dataTables.responsive.min.js"></script>
<script>
$(document).ready(function() {
var table = $('#example').DataTable({
responsive: true
})
.columns.adjust()
.responsive.recalc();
});
</script>
<script type="text/javascript">
Fancybox.show([
{
type: "iframe",
preload: false,
width: 600,
height: 300,
},
]);
</script>
@stop
SELECT MONTH(data) Mes, SUM(import) total_mes FROM diari_despeses GROUP BY Mes
SELECT YEAR(data) year , MONTH(data) month , SUM(import) profit FROM diari_despeses GROUP BY month , year
buidar la columna categoria de la taula contactes_joan
======================================================
UPDATE contactes_joan SET categoria = null
seleccionar de contactes_joan els que tinguin com a categoria team_koalitic
===========================================================================
SELECT * FROM contactes_joan WHERE categoria = 'team_koalitic'
seleccionar tots els registres de la taula moviments que tinguin la paraula renda a la columna anotacions
=========================================================================================================
SELECT * FROM moviments WHERE anotacions LIKE "%renda%" OR anotacions LIKE "%renda%"
seleccionar la fila x de una taula
======================================
SELECT * FROM erotisme WHERE id='1'
"SELECT * FROM `tools` where categoria='requisits' order by id asc"
SELECT * FROM `aquarel.les` WHERE `autor` IN (10, 11)
SELECT * FROM `aquarel.les` WHERE `autor`= 12
SELECT * FROM `aquarel.les` WHERE `tag1` = 'curs'
SELECT * FROM eines_web WHERE descripcio LIKE '%essential%'
//DETAL DE VENDAS PER PRODUCTE
$sql = "SELECT `producte`, sum(import) FROM `venda` group by `producte`";
Database: `latest`
-- Estructura de la taula `data`
CREATE TABLE IF NOT EXISTS `data` (
`id` int(11) NOT NULL AUTO_INCREMENT,
`name` varchar(50) NOT NULL,
`age` int(10) NOT NULL,
PRIMARY KEY (`id`)
) ENGINE=InnoDB DEFAULT CHARSET=latin1 AUTO_INCREMENT=3 ;
-- Bolcant dades de la taula `data`
INSERT INTO `data` (`id`, `name`, `age`) VALUES
(1, 'joan puig bertran', 58),
(2, 'carme batllo dam', 56);
use App\Models\Producte; public function ensenyarnailsgallery(Request $request) { $productes = Producte::select() ->wherein("productes.category_id", [12,])->get(); return view('nails_gallery', compact('productes')); }
a routes:
Route::get('/nails_gallery', [ProducteController::class, 'ensenyarnailsgallery']);
C:\xampp\htdocs\quick_jude>php artisan route:list GET|HEAD / ........................................................................................................ POST _ignition/execute-solution . ignition.executeSolution › Spatie\LaravelIgnition › ExecuteSolutionController GET|HEAD _ignition/health-check ............. ignition.healthCheck › Spatie\LaravelIgnition › HealthCheckController POST _ignition/update-config .......... ignition.updateConfig › Spatie\LaravelIgnition › UpdateConfigController GET|HEAD admin .............................................. filament.pages.dashboard › Filament\Pages › Dashboard GET|HEAD admin/blog/authors ........ filament.resources.blog/authors.index › Stephenjude\FilamentBlog › ListAuthors GET|HEAD admin/blog/authors/create filament.resources.blog/authors.create › Stephenjude\FilamentBlog › CreateAuthor GET|HEAD admin/blog/authors/{record}/edit filament.resources.blog/authors.edit › Stephenjude\FilamentBlog › EditAu… GET|HEAD admin/blog/categories filament.resources.blog/categories.index › Stephenjude\FilamentBlog › ListCategories GET|HEAD admin/blog/categories/create filament.resources.blog/categories.create › Stephenjude\FilamentBlog › Creat… GET|HEAD admin/blog/categories/{record}/edit filament.resources.blog/categories.edit › Stephenjude\FilamentBlog › … GET|HEAD admin/blog/posts .............. filament.resources.blog/posts.index › Stephenjude\FilamentBlog › ListPosts GET|HEAD admin/blog/posts/create ..... filament.resources.blog/posts.create › Stephenjude\FilamentBlog › CreatePost GET|HEAD admin/blog/posts/{record}/edit .. filament.resources.blog/posts.edit › Stephenjude\FilamentBlog › EditPost GET|HEAD admin/login .................................................. filament.auth.login › Filament\Http › Login GET|HEAD api/user ................................................................................................. GET|HEAD categories ............................................................................................... GET|HEAD category_controllers ..................................................................................... GET|HEAD category_filament ........................................................................................ GET|HEAD category_migrations ...................................................................................... GET|HEAD category_models .......................................................................................... GET|HEAD category_php ............................................................................................. GET|HEAD category_routes .......................................................................................... GET|HEAD category_views ........................................................................................... GET|HEAD dashboard ...................................................................................... dashboard GET|HEAD datatables ............................................................................................... GET|HEAD detall_post/{id} ......................................................................................... GET|HEAD filament/assets/{file} .................................. filament.asset › Filament\Http › AssetController POST filament/logout ..................................................................... filament.auth.logout GET|HEAD forgot-password .................. password.request › Laravel\Fortify › PasswordResetLinkController@create POST forgot-password ..................... password.email › Laravel\Fortify › PasswordResetLinkController@store GET|HEAD livewire/livewire.js .............................. Livewire\Controllers › LivewireJavaScriptAssets@source GET|HEAD livewire/livewire.js.map ............................ Livewire\Controllers › LivewireJavaScriptAssets@maps POST livewire/message/{name} .................. livewire.message › Livewire\Controllers › HttpConnectionHandler GET|HEAD livewire/preview-file/{filename} livewire.preview-file › Livewire\Controllers › FilePreviewHandler@handle POST livewire/upload-file .............. livewire.upload-file › Livewire\Controllers › FileUploadHandler@handle GET|HEAD login .................................... login › Laravel\Fortify › AuthenticatedSessionController@create POST login ............................................. Laravel\Fortify › AuthenticatedSessionController@store POST logout ................................. logout › Laravel\Fortify › AuthenticatedSessionController@destroy GET|HEAD register .................................... register › Laravel\Fortify › RegisteredUserController@create POST register ................................................ Laravel\Fortify › RegisteredUserController@store POST reset-password ........................... password.update › Laravel\Fortify › NewPasswordController@store GET|HEAD reset-password/{token} ................... password.reset › Laravel\Fortify › NewPasswordController@create GET|HEAD sanctum/csrf-cookie .................... sanctum.csrf-cookie › Laravel\Sanctum › CsrfCookieController@show GET|HEAD two-factor-challenge . two-factor.login › Laravel\Fortify › TwoFactorAuthenticatedSessionController@create POST two-factor-challenge ..................... Laravel\Fortify › TwoFactorAuthenticatedSessionController@store GET|HEAD user/confirm-password ............................... Laravel\Fortify › ConfirmablePasswordController@show POST user/confirm-password ........... password.confirm › Laravel\Fortify › ConfirmablePasswordController@store GET|HEAD user/confirmed-password-status password.confirmation › Laravel\Fortify › ConfirmedPasswordStatusControlle… POST user/confirmed-two-factor-authentication two-factor.confirm › Laravel\Fortify › ConfirmedTwoFactorAuthent… PUT user/password ......................... user-password.update › Laravel\Fortify › PasswordController@update GET|HEAD user/profile ............................... profile.show › Laravel\Jetstream › UserProfileController@show PUT user/profile-information user-profile-information.update › Laravel\Fortify › ProfileInformationController… POST user/two-factor-authentication two-factor.enable › Laravel\Fortify › TwoFactorAuthenticationController@st… DELETE user/two-factor-authentication two-factor.disable › Laravel\Fortify › TwoFactorAuthenticationController@d… GET|HEAD user/two-factor-qr-code ............ two-factor.qr-code › Laravel\Fortify › TwoFactorQrCodeController@show GET|HEAD user/two-factor-recovery-codes two-factor.recovery-codes › Laravel\Fortify › RecoveryCodeController@index POST user/two-factor-recovery-codes ............................ Laravel\Fortify › RecoveryCodeController@store GET|HEAD user/two-factor-secret-key ... two-factor.secret-key › Laravel\Fortify › TwoFactorSecretKeyController@show Showing [59] routes
Cal consultar el manual de Laravel d'n treurem sempre resultats excel.lents!.
Route::get('/categories', function () { $posts = Post::all(); return view('categories', compact('posts')); });
Route::get('/category_php', function () { $posts = Post::where('blog_category_id', '=', [1, ])->get(); return view('categories', compact('posts')); });
<?php use Illuminate\Support\Facades\Route; use Stephenjude\FilamentBlog\Models\Post; Route::get('/', function () { $posts = Post::all(); return view('welcome', compact('posts')); }); Route::get('/categories', function () { $posts = Post::all(); return view('categories', compact('posts')); }); Route::get('/datatables', function () { $posts = Post::all(); return view('datatables', compact('posts')); }); Route::get('/category_php', function () { $posts = Post::where('blog_category_id', '=', [1, ])->get(); return view('categories', compact('posts')); }); Route::get('/category_routes', function () { $posts = Post::where('blog_category_id', '=', [2, ])->get(); return view('categories', compact('posts')); }); Route::get('/category_controllers', function () { $posts = Post::where('blog_category_id', '=', [3, ])->get(); return view('categories', compact('posts')); }); Route::get('/category_models', function () { $posts = Post::where('blog_category_id', '=', [4, ])->get(); return view('categories', compact('posts')); }); Route::get('/category_views', function () { $posts = Post::where('blog_category_id', '=', [5, ])->get(); return view('categories', compact('posts')); }); Route::get('/category_migrations', function () { $posts = Post::where('blog_category_id', '=', [6, ])->get(); return view('categories', compact('posts')); }); Route::get('/category_filament', function () { $posts = Post::where('blog_category_id', '=', [8, ])->get(); return view('categories', compact('posts')); }); Route::get('/detall_post/{id}', function($id){ $post = Stephenjude\FilamentBlog\Models\Post::where('id', '=', $id)->firstOrFail(); return view('detall_post', compact('post')); }); Route::middleware([ 'auth:sanctum', config('jetstream.auth_session'), 'verified' ])->group(function () { Route::get('/dashboard', function () { return view('dashboard'); })->name('dashboard'); });
composer create-project laravel/laravel example-app
O podeu crear nous projectes de Laravel instal·lant globalment l'instal·lador de Laravel mitjançant Composer:
composer global require laravel/installer
laravel new example-app
composer require --dev laravel-shift/blueprint
composer require --dev jasonmccreary/laravel-test-assertions
executar el fitxer ddraft.yaml que hem creat a LARAFAST
php artisan blueprint:build
php artisan make:model Flight --migration
Podeu generar altres tipus de classes en generar un model, com ara fàbriques, sembradores, polítiques, controladors i sol·licituds de formulari. A més, aquestes opcions es poden combinar per crear diverses classes alhora:
generar model i controlador:
php artisan make:model Code --controller
Ordre artisan per generar sol·licituds de model, migració, fàbrica, sembradora, política, controlador i formularis...
php artisan make:model Flight --all
EXEMPLE
<?php namespace App\Models; use Illuminate\Database\Eloquent\Factories\HasFactory; use Illuminate\Database\Eloquent\Model; class Code extends Model { use HasFactory; /** * The attributes that are mass assignable. * * @var array */ protected $fillable = [ 'nom', 'slug', 'descripcio', 'blockcode', 'category_id', 'tag_id', 'youtube', 'web', 'txt', ]; /** * The attributes that should be cast to native types. * * @var array */ protected $casts = [ 'id' => 'integer', ]; public function category() { return $this->belongsTo(Category::class); } public function tag() { return $this->belongsTo(Tag::class); } }
Es un fitxer preaprat amb el nom: conexio.php i el guardare en algun lloc del projecte per cridarlo quan tingui que operar amb la BBDD.
<?php $servername = "localhost"; $database = "localhost"; $username = "root"; $password = ""; // Create connection $conn = mysqli_connect($servername, $username, $password, $database); // Check connection if (!$conn) { die("Connection failed: " . mysqli_connect_error()); } echo "Connected successfully"; mysqli_close($conn); ?>
aqui el repositori original de victorgarciasisi
aqui el meu amb unes modificacions estudijoanpuig
CONTROLLER
use App\Models\Person;public function ensenyarlesmodels()
{
$people = Person::select(
"people.id",
"people.nom",
"people.slug",
"people.img",
"people.category_id",
"people.tag_id",
"people.youtube",
"people.web",
"people.folder",
"people.ins",
"people.face",
"people.mp3",
"categories.category_nom as lacategoria",
"tags.tag_nom as eltag"
)
->join("categories", "categories.id", "=", "category_id")
->join("tags", "tags.id", "=", "tag_id")
->where("category_id", "=", "6")
->get();
return view('models', compact('people'));
}
ROUTE
Route::get('/uikit_person', [PersonController::class, 'ensenyarmodels']);
DESCARREGA GRATUITA DEL PROGRAMA -> TablePlus
Amb el boto de la dreta i a la lista esquerra de taules en posem sobre el nom de la taula i en el desplegable seleccionem -> Copy Scrip as ->Laravel Migration.
VIEW: despres del foreach
{{ $posts->links() }}
MODEL
class Post extends Model { use HasFactory; use HasTags; protected $table = 'blog_posts'; protected $perPage = (5);
ROUTE
Route::get('/tailwind_nou_blog_posts_text', function () {
$title_page = "els apunts del jubilat ";
$posts = Post::select(
"blog_posts.id",
"blog_posts.title",
"blog_posts.excerpt",
"blog_posts.banner",
"blog_posts.content",
"blog_posts.published_at",
"blog_categories.name as lacategoria",
"blog_authors.name as lautor"
)
->join("blog_categories", "blog_categories.id", "=", "blog_category_id")
->join("blog_authors", "blog_authors.id", "=", "blog_author_id")
->orderBy('title', 'ASC')
->paginate(6);
return view('tailwind_nou_blog_posts_text', compact('title_page', 'posts'));});
Route::get('/', function () {
$title_page = "home gallery posts";
$posts = Post::select(
"blog_posts.id",
"blog_posts.title",
"blog_posts.excerpt",
"blog_posts.banner",
"blog_posts.content",
"blog_posts.published_at",
"blog_categories.name as lacategoria",
"blog_authors.name as lautor"
)
->join("blog_categories", "blog_categories.id", "=", "blog_category_id")
->join("blog_authors", "blog_authors.id", "=", "blog_author_id")
->wherein('blog_category_id', [1, 2, 3, 4, 5, 6, 7, 8])
->get();
return view('home', compact('title_page', 'posts'));
});
models:
Person:
nom: string:100
slug: string:100
img: string:500
category_id: foreignId
ins: string:500
relationships:
belongsTo: category
Category:
category_nom: string:100
slug: string:100
seeders: Person, Category
controllers:
Person:
resource
Category:
resource
<?php
$servername = "localhost";
$username = "joan";
$password = "password";
$dbname = "laravel";
// Create connection
$conn = new mysqli($servername, $username, $password, $dbname);
// Check connection
if ($conn->connect_error) {
die("Connection failed: " . $conn->connect_error);
}
$sql = "select `nom`, `img`,`category_id`,`tag_id`,`descripcio`,`blockcode`, `categories`.`category_nom` as `lacategoria` from `codes` inner join `categories` on `categories`.`id` = `codes`.`category_id`";
$result = $conn->query($sql);
if ($result->num_rows > 0) {
// output data of each row
while($row = $result->fetch_assoc()) {
?>
<!-- card -->
<div class="<?php echo "$row[lacategoria]";?>" data-tags="<?php echo "$row[nom]";?><?php echo "$row[lacategoria]";?><?php echo "$row[descripcio]";?>">
<div class="uk-card uk-card-small uk-card-default">
<div class="uk-card-header">
<div class="uk-grid uk-grid-small uk-text-small" data-uk-grid>
<div class="uk-width-expand">
<span class="cat-txt"><?php echo "$row[lacategoria]";?> /<?php echo "$row[tag_id]";?></span>
</div>
</div>
</div>
<div class="uk-card-media">
<div class="uk-inline-clip uk-transition-toggle" tabindex="0">
<img data-fancybox="gallery" class="lazy" data-src="img/<?php echo "$row[img]";?>" data-width="400" data-height="300" data-uk-img alt="" src="img/transp.gif">
</div>
</div>
<div class="uk-card-body">
<h6 class="uk-margin-small-bottom uk-margin-remove-adjacent uk-text-bold"><?php echo "$row[nom]";?></h6>
<p><?php echo "$row[descripcio]";?></p>
</div>
<div class="uk-card-footer">
<div class="uk-grid uk-grid-small uk-grid-divider uk-flex uk-flex-middle" data-uk-grid>
<div class="uk-width-auto uk-text-right">
<a href="/detall_code/5" data-uk-tooltip="title: llegir mes, veure codi" class="uk-icon-link" data-uk-icon="icon: file-text; ratio: 1.5"></a>
<a href="/detall_code/5"> AMPLIAR INFORMACIO</a>
</div>
</div>
</div>
</div>
</div>
<!-- /card -->
<?php }
} else {
echo "0 results";
}
$conn->close();
?>
Un gestor de contingut de bloc sense rostre amb text enriquit configurable i suport de reducció per al tauler d'administració de filaments.
composer require stephenjude/filament-blog
php artisan filament-blog:install
php artisan storage:link
php artisan migrate