關於網路那些事...

網路行銷,SEO,網路趨勢,教學文章,網頁設計,生活時事

Laravel - Eloquent model (二)

前面介紹過了如何建立 Model

這裡繼續用範例說明如何使用 Model 來進行數據操作

首先先建立一個 MemberController

php artisan make:controller MemberController

使用之前建立的 Members Models

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Members;

class MemberController extends Controller
{
}
?>

依序介紹新增、查詢、更新及刪除

1.新增資料

save()
底下範例可以直接 new Models 之後,指定欄位值
最後透過 save() 來將資料插入資料庫

<?php ...
    public function create(){
        $member = new Members;
        $member->name = 'a';
        $member->email = 'a@example.com';
        $member->sexual = 1;
        $member->save();
    }

create()

可以透過 Mass Assignment (批量分配)的方式,一行就指定好要插入的資料

但是在使用前要先在 Models 設定好 fillable 或 guarded

$fillable 是用來定義白名單,定義允許欄位名單
$guarded 是用來定義黑名單,定義不允許欄位名單

在這裡我們要先在 Models 定義允許名單,如下:

在這裡不設定黑名單,因此賦予一個空陣列
App\Models\Members.php

<?php
protected $fillable = ['name', 'email','sexual'];
protected $guarded = [];

接下來在 Controller 就能開始使用 create 批量分配新增一筆資料

create 最後會返回實體化 saved ,插入一筆資料

<?php

namespace App\Http\Controllers;

use Illuminate\Http\Request;

use App\Models\Members;

class MemberController extends Controller
{
    public function create(){
        $member = Members::create([
            'name' => 'hi',
            'email' => 'hi@gmail.com',
            'sexual' => 1
            ]);
    }
}

2. 查詢資料

all()

一次取出資料表所有資料:

<?php ...
$member = Members::all();

可直接透過 foreach 取出值

<?php ...
foreach($member as $row){
echo 'name:'.$row->name.', email:'.$row->email.'sexual:'.$row->sexual."</br>";
}

query builder 設定條件

可以透過 query builder 指定條件來取得資料表資料:

<?php ...
$member = Members::where('sexual', 0)
->orderBy('name', 'desc')
->take(10)
->get();

chunk 分塊

如果需要一次取出上千筆資料,可以透過 chunk 指定資料切割分塊量,將資料分塊送到Closure進行彙整

這種方式可以大幅節省記憶體用量

<?php
Members::chunk(200, function ($member) {
    foreach($member as $row){
    echo 'name:'.$row->name.', email:'.$row->email.'sexual:'.$row->sexual."</br>";
}
});

cursor()

一次取出大量資料時,如果是使用 query builder 設定條件方式

也能夠使用 cursor 來達到節省記憶體

<?php
$member = Members::where('sexual', 1)->orderBy('name', 'desc')->take(10)->cursor();
    foreach($member as $row){
    echo 'name:'.$row->name.', email:'.$row->email.'sexual:'.$row->sexual."</br>";
}

3. 更新

update()

<?php 
Members::where('sexual',1)->update(['sexual'=>1]);

4. 刪除

delete()

可以直接透過 query builder 以及 delete() 直接刪除指定條件的資料

<?php ...
$member = Members::where('name','gu')->delete();

destroy()

透過 destroy 可以指定要刪除的 id

<?php ...
Members::destroy([7,8,9]);

soft delete 軟刪除

在前面 Eloquent 並沒有提到軟刪除的部分

軟刪除可以讓我們不會真的刪掉數據,而是會透過一個 deleted_at 欄位來辨識哪些資料有被刪除

再開始使用之前,要先在 schema 新增 $table->softDeletes(); 就能夠自動產生 delete_at 欄位

<?php
Schema::create('members', function (Blueprint $table) {
$table->increments('id');
$table->string('name', 100)->nullable();
$table->string('email', 100)->unique();
$table->tinyInteger('sexual');
$table->timestamps();
$table->softDeletes();
});

Models 也要進行軟刪除設定

首先要載入 Illuminate\Database\Eloquent\SoftDeletes

並且$dates的屬性要加入 'deleted_at'

<?php

namespace App\Models;

use Illuminate\Database\Eloquent\Model;
use Illuminate\Database\Eloquent\SoftDeletes;

class Members extends Model
{
    use SoftDeletes;
    protected $dates = ['deleted_at'];
    
    protected $table = 'members';
    protected $fillable = ['name', 'email','sexual'];
    protected $guarded = [];
}

接著透過 delete() 或者 destroy() 就能夠透過軟刪除的方式處理

當透過Model查詢資料時,就會自動排除透過軟刪除的資料

withTrashed 查詢包含軟刪除在內的所有資料

可以透過 withTrashed 取得所有資料,包含軟刪除的資料

<?php ...
Members::withTrashed()->get();
foreach($member as $row){
    echo 'id:'.$row->id.', name:'.$row->name.', email:'.$row->email.'sexual:'.$row->sexual."</br>";
}

onlyTrashed 查詢透過軟刪除的資料

<?php ...
$member = Members::onlyTrashed()->get();

restore 指定將以軟刪除的資料恢復

<?php
Members::where(['sexual'=>0])->restore();

forceDelete 強制刪除

在啟用軟刪除時,可以透過 forceDelete 真實的將指定的資料刪除掉

刪除後就會從資料表移除

<?php
Members::where('name','e')->forceDelete();

如果你喜歡我們的文章內容,請在這裡按個讚



Laravel - Eloquent model (一)

Laravel 的 Eloquent model 提供查詢資料表以及新增資料到資料表的功能

這部分主要說明定義 Models 及 Migration


如果你喜歡我們的文章內容,請在這裡按個讚



Laravel - Visual Studio Code 擴充套件及功能推薦

這裡列出幾個推薦使用的Visual Studio Code 利於 Laravel 開發的套件


如果你喜歡我們的文章內容,請在這裡按個讚



PHP - Passing by Reference

PHP 提供了一個將變數參照到函式中的功能

只要在定義 function 時,將要參照的變數前面加上 & 就可以宣告為參照

例如:這裡範例定義了函式以及參數設定為參照 - myfun(&$x)


如果你喜歡我們的文章內容,請在這裡按個讚



Laravel - How to Custom a Artisan Console

There show how to custom a php artisan command

first create your custom command

This will auto generate a file in app/Console/Command/Tests/TestOutput.php

and setting a relative command for calling this file in terminal command


如果你喜歡我們的文章內容,請在這裡按個讚



Mac - 如何顯示/取消隱藏檔案

除了 ctrl+shift+. 的方式可以切換

啟用終端機,以指令方式操作顯示/隱藏檔案方式如下:

顯示檔案

defaults write com.apple.finder AppleShowAllFiles TRUE;\killall Finder

隱藏檔案

defaults write com.apple.finder AppleShowAllFiles FALSE;\killall Finder

如果你喜歡我們的文章內容,請在這裡按個讚



Laravel - Laradock 安裝

Laradock 在 Laravel 社群相當知名,它提供了完整套件 Docker-Images及相關設定

讓我們能很簡單的就部署好完整的 Laravel 開發環境

當然也可以支援其他PHP專案,像是 Symfony, CodeIgniter, WordPress 等

這裡介紹如何快速的透過 Laradock 安裝 NGINX, PHP, Composer, MySQL, Redis 及 Beanstalkd


如果你喜歡我們的文章內容,請在這裡按個讚



如何關閉mac預設 apache 啟動執行

關閉MAC本地 apache

MAC系統會自帶 apache, 在這裡要先將它關閉

暫停apache

sudo apachectl -k stop

關閉開機啟動

sudo launchctl unload -w /System/Library/LaunchDaemons/org.apache.httpd.plist

如果你喜歡我們的文章內容,請在這裡按個讚



Laravel - Sublime Text3 搭配 SFTP 連線管理 Homestead

安裝 sublime text sftp

shift+command+p > Package Control:Install Package > sftp

開啟設定檔

File>SFTP/FTP/Setup Server

這時會開啟一個json格式的設定檔案

查看 vagant ssh-config

首先,先查看vagant ssh-config

$ vagrant ssh-config
Host homestead-7
  HostName 127.0.0.1
  User vagrant
  Port 2222
  UserKnownHostsFile /dev/null
  StrictHostKeyChecking no
  PasswordAuthentication no
  IdentityFile /Users/liaoxiangru/Homestead/.vagrant/machines/homestead-7/virtualbox/private_key
  IdentitiesOnly yes
  LogLevel FATAL
  ForwardAgent yes

SFTP CONFIG 檔案

設定 Sftp config 檔案,填寫對應資訊

例如:

{
    // The tab key will cycle through the settings when first created
    // Visit http://wbond.net/sublime_packages/sftp/settings for help
    
    // sftp, ftp or ftps
    "type": "sftp",

    "sync_down_on_open": true,
    "sync_same_age": true,
    
    "host": "127.0.0.1",
    "user": "vagrant",
    //"password": "password",
    "port": "2222",
    
    "remote_path": "/home/vagrant/code",
    //"file_permissions": "664",
    //"dir_permissions": "775",
    
    //"extra_list_connections": 0,

    "connect_timeout": 30,
    //"keepalive": 120,
    //"ftp_passive_mode": true,
    //"ftp_obey_passive_host": false,
    "ssh_key_file": "~/.ssh/id_rsa",
    //"sftp_flags": ["-F", "/path/to/ssh_config"],
    
    //"preserve_modification_times": false,
    //"remote_time_offset_in_hours": 0,
    "remote_encoding": "utf-8",
    //"remote_locale": "C",
    //"allow_config_upload": false,
}

接著存擋為 sftp-config.json

Browser Server

File>SFTP/FTP/Browser Server > sftp-config.json

接著就可以逐步選取開啟遠端檔案

Upload file

編輯檔案後,在頁籤 ctrl+右鍵 > upload file


如果你喜歡我們的文章內容,請在這裡按個讚



Laravel - Homestead

Laravel Homestead 介紹

Laravel 為了讓PHP開發整體體驗都能完善,在local開發的環境設定也提供了相關解決方案

也就是這裡要介紹的 Homestead

Laravel Homestead 是官方所維護的 Vagrant box pre-package

讓你可以直接透過這個環境開發,而不必再獨立安裝PHP、Web server...等軟體

並且不必擔心忘記系統設定,因為 Vagrant boxes 是一次性設定安裝完畢,

如果在安裝流程有發現錯誤,隨時都可以重新安裝環境,並且只需要幾分鐘的時間就能完成


如果你喜歡我們的文章內容,請在這裡按個讚