<?xml version="1.0" encoding="UTF-8"?><rss version="2.0"
	xmlns:content="http://purl.org/rss/1.0/modules/content/"
	xmlns:wfw="http://wellformedweb.org/CommentAPI/"
	xmlns:dc="http://purl.org/dc/elements/1.1/"
	xmlns:atom="http://www.w3.org/2005/Atom"
	xmlns:sy="http://purl.org/rss/1.0/modules/syndication/"
	xmlns:slash="http://purl.org/rss/1.0/modules/slash/"
	
	xmlns:georss="http://www.georss.org/georss"
	xmlns:geo="http://www.w3.org/2003/01/geo/wgs84_pos#"
	>

<channel>
	<title>Laravel | みんたく</title>
	<atom:link href="https://mintaku-blog.net/category/develop/laravel/feed/" rel="self" type="application/rss+xml" />
	<link>https://mintaku-blog.net</link>
	<description>みんたくの技術ブログ</description>
	<lastBuildDate>Tue, 04 Aug 2020 07:28:41 +0000</lastBuildDate>
	<language>ja</language>
	<sy:updatePeriod>
	hourly	</sy:updatePeriod>
	<sy:updateFrequency>
	1	</sy:updateFrequency>
	<generator>https://wordpress.org/?v=6.0.11</generator>

<image>
	<url>https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/06/cropped-ipad-820272_640.jpg?fit=32%2C32&#038;ssl=1</url>
	<title>Laravel | みんたく</title>
	<link>https://mintaku-blog.net</link>
	<width>32</width>
	<height>32</height>
</image> 
<site xmlns="com-wordpress:feed-additions:1">144480658</site>	<item>
		<title>LaravelでシンプルなTODOリストを作ってみた</title>
		<link>https://mintaku-blog.net/739-2/</link>
					<comments>https://mintaku-blog.net/739-2/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Fri, 14 Dec 2018 10:11:34 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[開発技術]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=739</guid>

					<description><![CDATA[<p>LaravelとjQueryと使ってシンプルなTODOリスト作りました。その開発過程や使用した技術などをメモしておきます。 作ったもの シンプルなTODOリ …</p>
The post <a href="https://mintaku-blog.net/739-2/">LaravelでシンプルなTODOリストを作ってみた</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>LaravelとjQueryと使ってシンプルなTODOリスト作りました。その開発過程や使用した技術などをメモしておきます。</p>
<h2>作ったもの</h2>
<p>シンプルなTODOリスト</p>
<p><img data-attachment-id="740" data-permalink="https://mintaku-blog.net/739-2/1jia2-xnljx/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/1jia2-xnljx.gif?fit=344%2C610&amp;ssl=1" data-orig-size="344,610" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="1jia2-xnljx" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/1jia2-xnljx.gif?fit=169%2C300&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/1jia2-xnljx.gif?fit=344%2C610&amp;ssl=1" loading="lazy" class="aligncenter size-full wp-image-740" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/12/1jia2-xnljx.gif?resize=344%2C610" alt="" width="344" height="610" data-recalc-dims="1" /></p>
<h2>作った経緯</h2>
<p>今日やることをサクッとメモして、優先順位をつけたりできるサービスがあればなと個人的に思ったからですね。</p>
<p>ごちゃごちゃたくさん機能がついているもの よりもシンプルに今日やることをリスト化できればタスクに集中しやすいと思い、作りました。</p>
<h2>サービスのこだわり</h2>
<h3>とにかくシンプルに</h3>
<p>最初作った時は、更新ボタンやソート確定ボタンなどごちゃごちゃしていたのですが、とにかく使いやすくするように不要な要素はできるだけそぎ落としまし た。ボタン名もつけずに直感的に使えるようにしました。</p>
<p>処理は非同期で行い、タスクの登録や更新はフォーカスアウトすることで確定します。タスクのソートも実行した時点で確定されます。</p>
<h3>タスクの優先順位を簡単に変更できる</h3>
<p>上下の矢印をクリックすることで、簡単にタスクの優先順位を変更することができます。</p>
<h3>書けるタスクは1行</h3>
<p>書こうと思えば長く書けてしまうタスクですが、あえて1行に制限することで、何をやるべきかを明確化することを目的としています。</p>
<h2>使用した技術</h2>
<ul>
<li>Laravel Webフレームワーク</li>
<li>Materialize CSSフレームワーク</li>
<li>MAMP ローカル環境</li>
<li>MySQL データベース</li>
<li>Apache Webサーバ</li>
</ul>
<h2>フロントサイド</h2>
<p>基本的に処理はAjaxを使い非同期で行っています。</p>
<p>例として、削除時の処理をのせます。削除対象のタスクIDを取得して、サーバサイドで削除処理を実行します。</p><pre class="crayon-plain-tag">// 削除
$('.delete_task_button').on('click', function(e) {

    var $task_id = $(this).attr("value");
    var $delete_url = '/tasks/' + $task_id + '/delete';

    // 追加メモが登録されていない場合
    if( typeof $task_id === 'undefined') {
        $(this).parent().remove();

        return;
    }

    // 2重送信防止
    $('.delete_task_button').each(function(i, elm) {
        $(elm).prop('disabled', true).addClass('disabled');
    });

    $.ajax({
        headers: {
        'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
        },
        url: $delete_url,
        type: 'post',
        data: {'task_id': $task_id}
    })
    .done(function() {
        $('*[name=' + $task_id + ']').parent().remove();
    })
    .fail(function(data) {
        $('.message' + $task_id).text(data.responseJSON).show();
    });

    // ボタン解除
    $('.delete_task_button').each(function(i, elm) {
        $(elm).prop('disabled', false).removeClass('disabled');
    });
});</pre><p>上下に移動する処理はjquery.smoothswap.jsを使って実現しています。</p>
<p>使い方はいたって簡単。jQuery本体とこちらのプラグインを一緒に読み込み、入れ替えたいパネル単位に“smoothswap-panel”を指定します。</p>
<p>パネル内の上に動かすための要素を”smoothswap-up”、下に動かすための要素を “smoothswap-down”とクラスを指定するだけです。</p><pre class="crayon-plain-tag">function setSmoothswap(){
    $('.smoothswap').smoothswap({
        marginHeight: 10,
        onswapped: function onSwapped(base, first, second) {
            base.children('.smoothswap-panel').each(function(index) {
            });
        }
    });
}</pre><p>移動スピードを上げるには以下を追加すれば、早くなります。</p><pre class="crayon-plain-tag">duration: 'fast',</pre><p><div class="ys-blog-card">
	<div class="ys-blog-card__container">
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="http://www.otchy.net/javascript/smoothswap/">jquery.smoothswap.js - OTCHY.NET</a>
			</p>
										<div class="ys-blog-card__domain">www.otchy.net</div>
					</div>
	</div>
</div>
</p>
<h2>サーバサイド</h2>
<h3>ルーティング</h3>
<p>削除ルーティングは以下の通り。</p><pre class="crayon-plain-tag">Route::post('tasks/{id}/delete', 'TasksController@delete');</pre><p></p>
<h3>コントローラ</h3>
<p>POSTされた削除対象IDを取得し、サービスに投げ削除実行します。実行結果によって、Viewに返すJSONレスポンスを変えます。</p>
<p>削除が失敗した場合はエラーメッセージを返します。</p><pre class="crayon-plain-tag">/**
* タスク削除
*
* @return \Illuminate\Http\Response
*/
public function delete()
{
    // 削除処理実行
    $task_delete = $this-&gt;registerService-&gt;deleteTask($_POST['task_id']);

    if (!$task_delete)
    {
        // HTTPステータス 500
        return response()-&gt;json($this-&gt;registerService-&gt;getErrorMessage(),
            \Illuminate\Http\Response::HTTP_INTERNAL_SERVER_ERROR);
        }

    // HTTPステータス 204
    return response()-&gt;json(null, \Illuminate\Http\Response::HTTP_NO_CONTENT);
}</pre><p></p>
<h3>サービス</h3>
<p>サービスで行ロックして削除処理を実行しています。シンプルにfindOrFail()メソッドでサクッとコントローラに書いても良いと思います。勉強もかねてコントローラとサービスに分けて処理を書きました。</p><pre class="crayon-plain-tag">/**
* 削除処理
*
* @param array $task_id タスクID
*
* @return \Illuminate\Http\Response
*/
public function deleteTask($task_id)
{
    DB::beginTransaction();

    try
    {
        // 行ロック
        $task = Task::lockForUpdate()-&gt;withTrashed()-&gt;find($task_id);
        if ($task === null || !empty($task-&gt;deleted_at)) throw new NotFoundException();

        $task-&gt;delete();

        DB::commit();

        return true;
    }
    catch (NotFoundException $e)
    {
        DB::rollBack();
        \Log::error($e-&gt;getMessage());

        $this-&gt;error_message = 'タスクが存在しないか既に削除されています。';

        return false;
    }
    catch (Exception $e)
    {
        DB::rollBack();
        \Log::error($e-&gt;getMessage());

        $this-&gt;error_message = '予期せぬエラーが発生しました。';

        return false;
    }
}</pre><p></p>The post <a href="https://mintaku-blog.net/739-2/">LaravelでシンプルなTODOリストを作ってみた</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/739-2/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">739</post-id>	</item>
		<item>
		<title>【Laravel】hasManyThroughリレーションを使う方法まとめ</title>
		<link>https://mintaku-blog.net/laravel-hasmanythrough/</link>
					<comments>https://mintaku-blog.net/laravel-hasmanythrough/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sun, 02 Dec 2018 05:11:17 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[開発技術]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=731</guid>

					<description><![CDATA[<p>LaravelのhasManyThroughリレーションで仲介するテーブルを通して最終的に取得したテーブルへアクセスする方法をまとめました。 ① Larav …</p>
The post <a href="https://mintaku-blog.net/laravel-hasmanythrough/">【Laravel】hasManyThroughリレーションを使う方法まとめ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>LaravelのhasManyThroughリレーションで仲介するテーブルを通して最終的に取得したテーブルへアクセスする方法をまとめました。</p>
<h2>① LaravelでhasManyThroughを使う(第1、2引数)</h2>
<p>以下の3つのテーブルを例に、departmentsを経由してemployeeを取得する。</p>
<p>companiesテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
name &#8211; string</p>
<p>departmentsテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
company_id &#8211; integer<br />
name &#8211; string</p>
<p>employeesテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
department_id &#8211; integer<br />
name &#8211; string</p>
<p></p><pre class="crayon-plain-tag">&lt;?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    /**
    * 会社の全従業員を取得
    */
    public function employees()
    {
        return $this-&gt;hasManyThrough('App\Employee', 'App\Department');
    }
}</pre><p></p>
<ul>
<li>第1引数 最終的に取得したいモデル名</li>
<li>第2引数 仲介するモデル名</li>
</ul>
<h2>② LaravelでhasManyThroughを使う(第1、2、3、4引数)</h2>
<p>リレーションのキーをカスタマイズする場合は、以下のように指定。</p>
<p>companiesテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
name &#8211; string</p>
<p>departmentsテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
company_id &#8211; integer<br />
name &#8211; string</p>
<p>employeesテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
department_id &#8211; integer<br />
name &#8211; string</p>
<p></p><pre class="crayon-plain-tag">&lt;?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    /**
    * 会社の全従業員を取得
    */
    public function employees()
    {
        return $this-&gt;hasManyThrough('App\Employee', 'App\Department', 'company_id', 'department_id');
    }
}</pre><p></p>
<ul>
<li>第1引数 最終的に取得したいモデル名</li>
<li>第2引数 仲介するモデル名</li>
<li>第3引数 仲介するモデルの外部キー名</li>
<li>第4引数 最終的に取得したいモデルの外部キー名</li>
</ul>
<h2>③ LaravelでhasManyThroughを使う(第1、2、3、4、5、6引数)</h2>
<p>リレーションのキーをより細かくカスタマイズする場合は、以下のように指定。</p>
<p>companiesテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
name &#8211; string</p>
<p>departmentsテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
company_id &#8211; integer<br />
name &#8211; string</p>
<p>employeesテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
department_id &#8211; integer<br />
name &#8211; string</p>
<p></p><pre class="crayon-plain-tag">&lt;?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    /**
    * 会社の全従業員を取得
    */
    public function employees()
    {
        return $this-&gt;hasManyThrough('App\Employee', 'App\Department', 'company_id', 'department_id', 'id', 'id');
    }
}</pre><p></p>
<ul>
<li>第1引数 最終的に取得したいモデル名</li>
<li>第2引数 仲介するモデル名</li>
<li>第3引数 仲介するモデルの外部キー名</li>
<li>第4引数 最終的に取得したいモデルの外部キー名</li>
<li>第5引数 リレーション元のローカルキー名</li>
<li>第6引数 最終的に取得したいモデルのローカルキー名</li>
</ul>
<p><span style="font-size: 8px;">参考：<a href="https://readouble.com/laravel/5.5/ja/eloquent-relationships.html#has-many-through" target="_blank" rel="noopener">Laravel 5.5 Eloquent：リレーション</a></span></p>
<h2>④ LaravelでhasManyThroughを使う(第1、2、3、4、5、6引数) 中間テーブルにどちらの外部キーも持っていた場合</h2>
<p>3つテーブルが以下のようなカラム配置になっていた場合(中間テーブルにどちらの外部キーも持っていた場合)のhasManyThroughの使い方はこれ。</p>
<p>companiesテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
name &#8211; string</p>
<p>departmentsテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
company_id &#8211; integer<br />
enployee_id integer<br />
name &#8211; string</p>
<p>employeesテーブル</p>
<p style="padding-left: 30px;">id &#8211; integer<br />
name &#8211; string</p>
<p></p><pre class="crayon-plain-tag">&lt;?php

namespace App;

use Illuminate\Database\Eloquent\Model;

class Company extends Model
{
    /**
    * 会社の全従業員を取得
    */
    public function employees()
    {
        return $this-&gt;hasManyThrough('App\Employee', 'App\Department', 'company_id', 'id', null, 'enployee_id')
    }
}</pre><p></p>
<ul>
<li>第1引数 最終的に取得したいモデル名</li>
<li>第2引数 仲介するモデル名</li>
<li>第3引数 仲介するモデルの外部キー名</li>
<li>第4引数 最終的に取得したいモデルのローカルキー名</li>
<li>第5引数 最終的に取得したいモデルの外部キー名</li>
<li>第6引数 最終的に取得したモデルと仲介するモデルを紐付けるキー名</li>
</ul>
<p>公式リファレンスにはこのパターンの取得方法が書かれていなかったため、以下の記事を参考にしてリレーションの取得に成功。ただあくまでに参考程度に。</p>
<p>まず使っているLaravelのバージョンにあわせたリファレンスを読み込むのが大事ですね。</p>
<p>&nbsp;</p>
<p><span style="font-size: 8px;">参考：<a href="https://qiita.com/YuK1Game/items/406791b699774d15d11d" target="_blank" rel="noopener">Laravelのリレーション hasManyThrough の使い方を毎回間違うのでメモ</a></span></p>
<p><span style="font-size: 8px;">参考：<a href="https://www.ritolab.com/entry/122" target="_blank" rel="noopener">LaravelのEloquentORMでモデルベースのDBリレーション～基本からEagerロードまで～</a></span></p>The post <a href="https://mintaku-blog.net/laravel-hasmanythrough/">【Laravel】hasManyThroughリレーションを使う方法まとめ</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/laravel-hasmanythrough/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">731</post-id>	</item>
		<item>
		<title>【Laravel】CSVファイルとして出力(ダウンロード)する方法</title>
		<link>https://mintaku-blog.net/laravel-csv/</link>
					<comments>https://mintaku-blog.net/laravel-csv/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sat, 01 Dec 2018 07:31:03 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[開発技術]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=720</guid>

					<description><![CDATA[<p>LaravelでCSVファイルとして出力(ダウンロード)する方法メモ。例として、View側で入力した年齢からユーザを取得し、CSVファイルとしてダウンロード …</p>
The post <a href="https://mintaku-blog.net/laravel-csv/">【Laravel】CSVファイルとして出力(ダウンロード)する方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>LaravelでCSVファイルとして出力(ダウンロード)する方法メモ。例として、View側で入力した年齢からユーザを取得し、CSVファイルとしてダウンロードする処理を紹介します。</p>
<h2>View側の処理</h2>
<p>Viewで入力した値をコントローラにsubmitします。</p><pre class="crayon-plain-tag">...

{!! Form::open(['action' =&gt; 'UsersController@csv', 'method' =&gt; 'get', 'target' =&gt; '_blank']) !!}

&lt;div class="input-field"&gt;
    {!! Form::number(‘age’, null, [ 'placeholder' =&gt; '半角数字で入力']) !!}
    &lt;label class="age"&gt;年齢&lt;/label&gt;
&lt;/div&gt;

&lt;input class="csv-download" type="submit" value="CSVダウンロード"&gt;

{!! Form::close() !!}

...</pre><p>&nbsp;</p>
<h2>ルーティング</h2>
<p>コントローラにGETリクエストするためのルーティングを記述。</p><pre class="crayon-plain-tag">Route::get('users/csv', 'UsersController@csv');</pre><p>&nbsp;</p>
<h2>コントローラ</h2>
<p>Viewから送られてきたリクエスト(ここで言う年齢)から、同年齢のユーザ情報取得します。ユーザ情報はサービスに送り、実際のCSVダウンロードの処理はサービスで行います。</p><pre class="crayon-plain-tag">...

    private $csvService;

    /**
    * コンストラクタ
    *
    * @param App\Services\Users\CsvService $csvService
    *
    */
    public function __construct(CsvService $csvService)
    {
        $this-&gt;csvService = $csvService;
    }

    /**
    * CSVダウンロード
    *
    * @param Request $request リクエスト
    *
    * @return csv
    */
    public function csv(Request $request)
    {
        // リクエストで送られてきた年齢を取得
        $target_age = $request-&gt;input('age');

        // 同年齢のユーザ情報取得
        $target_age_users = Users::where(‘age’, $target_age)-&gt;get();

        // CSVダウンロード
        return $this-&gt;csvService-&gt;download($target_age_users, $target_age);
    }

...</pre><p>&nbsp;</p>
<h2>サービス</h2>
<p>SymfonyのStreamedResponseクラスを使用し、CSVダウンロードを行います。StreamedResponseは大容量のCSVにも耐えることができます。</p>
<p><a href="http://php.net/manual/ja/wrappers.php.php" target="_blank" rel="noopener noreferrer">php://outputストリーム</a>を使用してファイルに書き出すことなく、CSV形式を都度出力します。</p>
<p>配列データをCSVファイルに書き込む<a href="http://php.net/manual/ja/function.fputcsv.php" target="_blank" rel="noopener noreferrer">fputcsv関数</a>を使用し、CSV形式にフォーマットします。</p>
<p><span style="font-size: 8px;">参考：<a href="http://toyo.hatenablog.jp/entry/2017/04/16/115309" target="_blank" rel="noopener noreferrer">laravel5.3 CSVダウンロードを実装する</a></span></p><pre class="crayon-plain-tag">&lt;?php
namespace App\Services\Users;

use App\Services\Users\CsvService;
use Symfony\Component\HttpFoundation\StreamedResponse;

class CsvService
{
    /**
    * ユーザ情報 CSVダウンロード
    *
    * @param array $target_age_users 同年齢のユーザ情報
    * @param int $target_age       入力された年齢
    *
    * @return StreamedResponse CSVファイル情報
    */
    public function download($target_age_users, $target_age)
    {
        // CSVファイル名
        $current_time = now();
        $file_name    = $target_age.$current_time-&gt;format('YmdHis').'.csv';

        $streamed_response = new StreamedResponse(
            function () use ($target_age_users) {
                $stream = fopen('php://output', 'w');

                fputcsv($stream, [
                    mb_convert_encoding('ユーザID', 'SJIS', 'auto'),
                    mb_convert_encoding('ユーザ名', 'SJIS', 'auto'),
                    mb_convert_encoding('郵便番号', 'SJIS', 'auto'),
                    mb_convert_encoding('住所', 'SJIS', 'auto'),
                    mb_convert_encoding('電話番号', 'SJIS', 'auto'),
                ]);

                if (isset($target_age_users))
                {
                    foreach ($target_age_users as $target_age_user)
                    {
                        fputcsv($stream, [
                            mb_convert_encoding($target_age_user['id'], 'SJIS', 'auto'),
                            mb_convert_encoding($target_age_user['name'], 'SJIS', 'auto'),
                            mb_convert_encoding($target_age_user['postal_code'], 'SJIS', 'auto'),
                            mb_convert_encoding($target_age_user['address'], 'SJIS', 'auto'),
                            mb_convert_encoding($target_age_user['tel'], 'SJIS', 'auto'),
                        ]);
                    }
                }

                fclose($stream);
            },
            \Illuminate\Http\Response::HTTP_OK,
            [
                'Content-Type'        =&gt; 'text/csv',
                'Content-Disposition' =&gt; 'attachment; filename=$file_name',
            ]
        );

        return $streamed_response;
    }

}</pre><p>以上、LaravelでCSVファイルとして出力(ダウンロード)する方法でした。</p>The post <a href="https://mintaku-blog.net/laravel-csv/">【Laravel】CSVファイルとして出力(ダウンロード)する方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/laravel-csv/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">720</post-id>	</item>
		<item>
		<title>【Laravel】バリデーション失敗時に入力値を保持するoldヘルパの使い方</title>
		<link>https://mintaku-blog.net/laravel-oldhelper/</link>
					<comments>https://mintaku-blog.net/laravel-oldhelper/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Fri, 23 Nov 2018 02:50:57 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[開発技術]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=715</guid>

					<description><![CDATA[<p>登録画面などでバリデーションを使う際、入力値が保持されない問題が発生。直前の入力値を保持するための方法をメモとして残しておきます。 Laravelでバリデー …</p>
The post <a href="https://mintaku-blog.net/laravel-oldhelper/">【Laravel】バリデーション失敗時に入力値を保持するoldヘルパの使い方</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>登録画面などでバリデーションを使う際、入力値が保持されない問題が発生。直前の入力値を保持するための方法をメモとして残しておきます。</p>
<h2>Laravelでバリデーション失敗時に入力値を保持するoldヘルパの使い方</h2>
<p>view側(Bladeテンプレート)で直前の入力値を保持するには「old」ヘルパを使います。入力していない場合はnullを返します。</p><pre class="crayon-plain-tag">&lt;input type=’text’ name=’name’ value="{{ old(‘name’) }}"&gt;</pre><p>公式では上のように書いていますが、下のような書き方でもいけます。</p><pre class="crayon-plain-tag">{!! Form::text('name’, old('name’)) !!}</pre><p><span style="font-size: 8px;">参考：<a href="https://readouble.com/laravel/5.5/ja/requests.html" target="_blank" rel="noopener">Laravel 5.5 HTTPリクエスト</a></span></p>
<p>&nbsp;</p>
<h2>Laravelバリデーションのoldヘルパの使用例</h2>
<p></p><pre class="crayon-plain-tag">...

&lt;div class="input-field"&gt;
    {!! Form::text('name’, old('name'), ['placeholder' =&gt; '例） hoge']) !!}
    &lt;!-- バリデーション失敗時にエラーメッセージが表示される --&gt;
    @if($errors-&gt;has('name'))
        &lt;p class=’error’&gt;{{ $errors-&gt;first('name') }}&lt;/p&gt;
    @endif
    &lt;label for=’name’ class=’name-label’&gt;名前&lt;/label&gt;
&lt;/div&gt;

...</pre><p>以上、Laravelのバリデーション失敗時に入力値を保持する方法でした。</p>The post <a href="https://mintaku-blog.net/laravel-oldhelper/">【Laravel】バリデーション失敗時に入力値を保持するoldヘルパの使い方</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/laravel-oldhelper/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">715</post-id>	</item>
		<item>
		<title>LaravelでAjaxを使う方法。サーバにPOSTしてResponseを返す</title>
		<link>https://mintaku-blog.net/laravel-ajax/</link>
					<comments>https://mintaku-blog.net/laravel-ajax/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 15 Nov 2018 15:01:46 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=702</guid>

					<description><![CDATA[<p>LaravelでAjax非同期通信を使う方法をユーザ削除する処理を例に紹介します。 流れとしては以下のようになります。 JavaScriptで削除対象のユー …</p>
The post <a href="https://mintaku-blog.net/laravel-ajax/">LaravelでAjaxを使う方法。サーバにPOSTしてResponseを返す</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>LaravelでAjax非同期通信を使う方法をユーザ削除する処理を例に紹介します。</p>
<p>流れとしては以下のようになります。</p>
<ol>
<li>JavaScriptで削除対象のユーザIDを取得</li>
<li>Ajaxでサーバ(コントローラ)にユーザIDを送信</li>
<li>コントローラからサービスを呼び出し、サービスでユーザ削除処理実行</li>
<li>サービスで削除処理した実行結果をコントローラに渡す</li>
<li>受け取った実行結果をコントローラからjson形式でviewに返す</li>
</ol>
<h2>実行環境</h2>
<ul>
<li>PHP: 7.2</li>
<li>Laravel: 5.7</li>
<li>jQuery: 3.3.1</li>
</ul>
<h2>CSRFの対策処理</h2>
<p>POSTする場合は、CSRF対策をする必要があります。ヘッダーにCSRFトークンを追加しましょう。</p><pre class="crayon-plain-tag">&lt;meta name="csrf-token" content="{{ csrf_token() }}"&gt;</pre><p></p>
<h2>JavaScript(jQuery)の処理</h2>
<p></p><pre class="crayon-plain-tag">// 削除ボタン押下
$(function() {
    $('#delete_button').on('click', function() {
        $.ajax({
            headers: {
                'X-CSRF-TOKEN': $('meta[name="csrf-token"]').attr('content')
            },
            url: "{{ action('UsersController@destroy', ['user_id' =&gt; $user-&gt;id]) }}",
            type: 'POST',
            data: {'user_id': {{ $user-&gt;id }}, '_method': 'DELETE'}
        })
        // Ajaxリクエストが成功した場合
        .done(function(data) {
            $('.delete_message').text(data.responseJSON);
        })
        // Ajaxリクエストが失敗した場合
        .fail(function(data) {
            alert(data.responseJSON);
        });
    });
});</pre><p>削除ボタンの連続クリックを防ぐには、以下のように2重送信防止処理をを削除ボタン押下後に書き、削除処理実行後にボタン解除の処理を書くと良いでしょう。</p><pre class="crayon-plain-tag">// 2重送信防止
$('#delete_button').find('button').each(function(i, elm) {
    $(elm).prop('disabled', true).addClass('disabled');
});</pre><p></p>
<h2>コントローラの処理</h2>
<p>削除処理自体はサービスで行っているため、コンストラクタでサービスのインスタンスを生成します。</p>
<p>削除処理の実行結果を受け取り、削除が成功したか失敗したかでHTTPステータスを変えています。</p>
<p>・UsersController.php</p><pre class="crayon-plain-tag">....

    private $deleteService;

    /**
    * コンストラクタ
    *
    * @param App\Services\Users\DeleteService $delete_service
    *
    */
    public function __construct(DeleteService $delete_service)
    {
        $this-&gt;deleteService = $delete_service;
    }

    /**
    * ユーザ削除
    *
    * @param App\User $user_id ユーザID
    *
    * @return \Illuminate\Http\Response
    */
    public function destroy($user_id)
    {
        // ユーザ削除処理実行
        $user_delete = $this-&gt;deleteService&gt;deleteUser($user_id);

        if (!$user_delete)
        {
            // HTTPステータス:500 エラー
            return response()-&gt;json($this-&gt;deleteService&gt;getDeleteMessage(),
                \Illuminate\Http\Response::HTTP_INTERNAL_SERVER_ERROR);
        }

        // HTTPステータス:200 成功
        return response()-&gt;json($this-&gt;deleteService&gt;getDeleteMessage(), 
            \Illuminate\Http\Response::HTTP_OK);
    }

...

}</pre><p></p>
<h2>サービスの処理</h2>
<p>getDeleteMessage()メソッドはコントローラで、削除処理実行結果のメッセージを受け取れるようにしています。</p>
<p>一度削除対象のユーザIDから行ロック(削除済みの場合でも)を行い、ユーザが存在しない場合または削除されていた場合、例外を投げています。softDeleteを使用していない場合は、withTrashed()メソッドは必要ないです。</p>
<p>手っ取り早く削除対象あるかどうか判断する場合はfindOrFail()メソッドを使うと良いでしょう。</p>
<p>・DeleteService.php</p><pre class="crayon-plain-tag">...

    private $delete_message = null;

    /**
    * エラーメッセージ取得
    *
    * @return string $this-&gt;delete_message
    */
    public function getDeleteMessage()
    {
        return $this-&gt;delete_message;
    }

    /**
    * ユーザ削除処理
    *
    * @param array $user_id ユーザID
    *
    * @return \Illuminate\Http\Response
    */
    public function deleteUser($user_id)
    {
        DB::beginTransaction();
        try
        {
            // 削除対象のユーザを行ロック
            $user = User::lockForUpdate()-&gt;withTrashed()-&gt;find($user_id);

            // 削除対象ユーザが存在しない又は削除済みの場合エラー
            if ($user === null || !empty($user&gt;deleted_at))
            {
                throw new NotFoundException();
            }
            
            // 削除処理実行
            $user&gt;delete();

            DB::commit();

            $this-&gt;delete_message = 'ユーザの削除に成功しました。';

            return true;
        }
        catch (NotFoundException $e)
        {
            DB::rollBack();
            \Log::error($e-&gt;getMessage());

            $this-&gt;delete_message = 'ユーザが存在しないかすでに削除されています。';

            return false;
        }
        catch (Exception $e)
        {
            DB::rollBack();
            \Log::error($e-&gt;getMessage());

            $this-&gt;delete_message = '予期せぬエラーが発生しました。';

            return false;
        }
    }

...

}</pre><p></p>
<h2>ルーティング</h2>
<p>・web.php</p><pre class="crayon-plain-tag">Route::resource(users, 'UsersController');</pre><p>ルーティングはresourceルートを使用していますが、削除のみのルーティングの場合は以下でも使えます。</p><pre class="crayon-plain-tag">Route::post('users/{id}', 'UsersController'@destroy);</pre><p>&nbsp;</p>
<p>以上、 LaravelでAjax非同期通信を使う方法でした。削除以外にも色々使えますね。</p>The post <a href="https://mintaku-blog.net/laravel-ajax/">LaravelでAjaxを使う方法。サーバにPOSTしてResponseを返す</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/laravel-ajax/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">702</post-id>	</item>
		<item>
		<title>Laravelで行ロックとテーブルロックする方法【lockForUpdate】</title>
		<link>https://mintaku-blog.net/laravel-lockforupdate/</link>
					<comments>https://mintaku-blog.net/laravel-lockforupdate/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Thu, 15 Nov 2018 14:23:29 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[開発技術]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=692</guid>

					<description><![CDATA[<p>Laravelで行ロックとテーブルロックする方法メモ。便利なlockForUpdateメソッドでサクッとロックできます。 行ロック // hogesテーブル …</p>
The post <a href="https://mintaku-blog.net/laravel-lockforupdate/">Laravelで行ロックとテーブルロックする方法【lockForUpdate】</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p><span style="font-weight: 400;">Laravelで行ロックとテーブルロックする方法メモ。便利なlockForUpdateメソッドでサクッとロックできます。</span></p>
<h2><span style="font-weight: 400;">行ロック</span></h2>
<p></p><pre class="crayon-plain-tag">// hogesテーブルで$hoge_idの主キーが存在する行をロック
Hoge::lockForUpdate()-&gt;withTrashed()-&gt;find($hoge_id);</pre><p></p>
<h2><span style="font-weight: 400;">テーブルロック</span></h2>
<p></p><pre class="crayon-plain-tag">// hogesテーブルをロック
Hoge::lockForUpdate()-&gt;withTrashed()-&gt;get();</pre><p>ロックはコミットするまで持続します。</p>
<p>&nbsp;</p>
<h3>lockForUpdateメソッド</h3>
<p>lockForUpdateメソッドで占有ロックをかけることができます。</p>
<p>select for updateのようなレコード更新や削除する際に、別のロックがかかるのを防ぐことができます。</p>
<p>また、共有ロックをかける場合はsharedLockメソッドをクエリに指定します。</p>
<p><span style="font-size: 8px;">参考：<a href="https://readouble.com/laravel/5.3/ja/queries.html" target="_blank" rel="noopener">Laravel 5.3 データベース：クエリビルダ</a></span></p>
<p>&nbsp;</p>
<h3>withTrashedメソッド</h3>
<p>ソフトデリートされたモデルであっても、withTrashedメソッドを使うことで一時的に除外されます。ソフトでリートを使用していない場合は不要です。</p>
<p>つまり、既に削除されたレコードでもwithTrashedメソッドを使うことで、対象のレコードを取得することが可能です。</p>
<p><span style="font-size: 8px;">参考：<a href="https://readouble.com/laravel/5.5/ja/validation.html" target="_blank" rel="noopener">Laravel 5.5 バリデーション</a></span></p>The post <a href="https://mintaku-blog.net/laravel-lockforupdate/">Laravelで行ロックとテーブルロックする方法【lockForUpdate】</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/laravel-lockforupdate/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">692</post-id>	</item>
		<item>
		<title>Laravelのバリデーションをカスタマイズする方法【カスタムバリデーション】</title>
		<link>https://mintaku-blog.net/validation-array/</link>
					<comments>https://mintaku-blog.net/validation-array/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Sat, 03 Nov 2018 04:12:02 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[開発技術]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=663</guid>

					<description><![CDATA[<p>Laravelのバリデーション方法とカスタマイズ方法を紹介します。 ・バージョン Laravel : 5.7 LaravelのバリデーションはFormReq …</p>
The post <a href="https://mintaku-blog.net/validation-array/">Laravelのバリデーションをカスタマイズする方法【カスタムバリデーション】</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Laravelのバリデーション方法とカスタマイズ方法を紹介します。</p>
<p>・バージョン</p>
<p>Laravel : 5.7</p>
<p>LaravelのバリデーションはFormRequestクラスを継承して実装します。</p>
<p>・App\Http\Requests\HogesRequest.php</p><pre class="crayon-plain-tag">&lt;?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;

class HogesRequest extends FormRequest
{
    /**
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * バリデーションルール
     * 
     * @return array
     */
    public function rules()
    {
         return [
             'tel'  =&gt; ['required', 'regex:/^[0-9\-]+$/i', 'max:14'],
             ...
         ];

    /**
     * バリデーションメッセージ
     * 
     * @return array
     */
    public function messages()
    {
        return [
            "required" =&gt; "入力してください",
            ...
        ];
    }

    /**
     * カラム名
     * 
     * @return array カラム名
     */
    public function attributes(){
        return [
            'tel'  =&gt; '電話番号',
            ...
        ];
    }

}</pre><p>一番上のメソッドであるauthorizeでは、リクエストに対する権限を設定します。例えば、現在ログイン中のユーザに権限がない場合「false」を返します。</p>
<p>&nbsp;</p>
<h2>Laravelのバリデーションをカスタマイズする方法</h2>
<p>独自でバリデーションをカスタマイズする場合は、Ruleを継承して実装します。</p>
<p>今回は例として、hogeテーブルのIDが存在しているかをチェックするカスタムバリデーションを実装します。</p>
<p>以下のコマンドを実行することで、カスタムバリデーションのファイルがApp/Rules配下に自動生成されます。</p><pre class="crayon-plain-tag">$ php artisan make:rule CheckId</pre><p>・App\Rules\CheckId.php</p><pre class="crayon-plain-tag">&lt;?php

namespace App\Rules;

use Illuminate\Contracts\Validation\Rule;
use App\Hoge;

class CheckId implements Rule
{
    /**
     * IDチェック
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value)
    {
        $id = Hoge::find((int)$value);
        if (!$id) return false;

        return true;
    }

    /**
     * エラーメッセージ
     *
     * @return string
     */
    public function message()
    {
        return "IDが存在しません";
    }
}
</pre><p>&nbsp;</p>
<p>ちなみにRuleの中身はこんな感じ。</p>
<p>・Illuminate\Contracts\Validation\Rule.php</p><pre class="crayon-plain-tag">&lt;?php

namespace Illuminate\Contracts\Validation;

interface Rule
{
    /**
     * Determine if the validation rule passes.
     *
     * @param  string  $attribute
     * @param  mixed  $value
     * @return bool
     */
    public function passes($attribute, $value);

    /**
     * Get the validation error message.
     *
     * @return string
     */
    public function message();
}
</pre><p>&nbsp;</p>
<p>あとは以下のように追加すればカスタム完了。</p><pre class="crayon-plain-tag">&lt;?php

namespace App\Http\Requests;

use Illuminate\Foundation\Http\FormRequest;
use Illuminate\Validation\Rule; ←追加
use App\Rules\CheckId; ←追加

class HogesRequest extends FormRequest
{
    /**
     * @return bool
     */
    public function authorize()
    {
        return true;
    }

    /**
     * バリデーションルール
     * 
     * @return array
     */
    public function rules()
    {
         return [
             'id'  =&gt; [new CheckId], ←追加
             'tel' =&gt; ['required', 'regex:/^[0-9\-]+$/i', 'max:14'],
             ...
         ];

    /**
     * バリデーションメッセージ
     * 
     * @return array
     */
    public function messages()
    {
        return [
            "required" =&gt; "入力してください",
            ...
        ];
    }

    /**
     * カラム名
     * 
     * @return array カラム名
     */
    public function attributes(){
        return [
            'id'   =&gt; 'ID',
            'tel'  =&gt; '電話番号',
            ...
        ];
    }

}</pre><p>カスタムバリデーションを使うために以下を追記します。</p><pre class="crayon-plain-tag">use Illuminate\Validation\Rule;
use App\Rules\CheckId;</pre><p>そして使用するカスタムバリデーションのインスタンスを生成します。</p><pre class="crayon-plain-tag">[new CheckId]</pre><p>&nbsp;</p>
<h2>Laravelのバリデーションを実行する方法</h2>
<p>バリデーション定義が終わったら後は簡単。</p>
<p>登録や更新処理などでバリデートしたいリクエストに対して、コントローラのメソッドの引数に使用するバリデーションを追加するだけ。</p>
<p>viewからコントローラにリクエストをsubmitする際に勝手にバリデートしてくれます。</p>
<div>
<pre class="crayon-plain-tag">use App\Http\Requests\HogesRequest;

...

public function store(HogesRequest $request)
{

...
</pre>
</div>
<p>&nbsp;</p>
<h2>Laravelのバリデーションエラーをviewで表示する方法</h2>
<p>viewにエラーメッセージを表示したい場合は、表示したい箇所で以下のように追加すればおけです。</p><pre class="crayon-plain-tag">...

@if($errors-&gt;has('id'))
    &lt;pclass="error"&gt;{{ $errors-&gt;first('id') }}&lt;/p&gt;
@endif
&lt;label&gt;ID&lt;/label&gt;

...

@if($errors-&gt;has('id'))
    &lt;pclass="error"&gt;{{ $errors-&gt;first('tel') }}&lt;/p&gt;
@endif
&lt;label&gt;電話番号&lt;/label&gt;

...</pre><p>&nbsp;</p>
<p>以上、laravelでカスタムバリデーションを実装する方法でした。</p>
<p><span style="font-size: 8px;">参考：<a href="https://readouble.com/laravel/5.5/ja/validation.html" target="_blank" rel="noopener">Laravel 5.5 バリデーション</a></span></p>The post <a href="https://mintaku-blog.net/validation-array/">Laravelのバリデーションをカスタマイズする方法【カスタムバリデーション】</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/validation-array/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">663</post-id>	</item>
		<item>
		<title>【Laravel】クエリビルダのwhereRawでハイフンをreplaceする方法</title>
		<link>https://mintaku-blog.net/whereraw-replace/</link>
					<comments>https://mintaku-blog.net/whereraw-replace/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Fri, 05 Oct 2018 15:09:05 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[開発技術]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=657</guid>

					<description><![CDATA[<p>LaravelクエリビルダのwhereRawで電話番号や郵便番号などのハイフンをreplaceを使って取り除く方法のメモ。 &#38;nbsp; -&#038;amp …</p>
The post <a href="https://mintaku-blog.net/whereraw-replace/">【Laravel】クエリビルダのwhereRawでハイフンをreplaceする方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>LaravelクエリビルダのwhereRawで電話番号や郵便番号などのハイフンをreplaceを使って取り除く方法のメモ。</p>
<p>&nbsp;</p><pre class="crayon-plain-tag">-&gt;whereRaw('replace(telephone, "-", "") = :telephone', ['telephone' =&gt; $telephone]);</pre><p>もしくは</p><pre class="crayon-plain-tag">-&gt;whereRaw('replace(telephone, "-", "") = ?', [$telephone]);</pre><p>こっちはEloquent ORMで使用可。上を使うとエラー出ました。</p>
<p>ちなみに検索条件などで電話番号を受け取った際、全てのハイフンをこれで置き換えることができます。</p><pre class="crayon-plain-tag">str_replace(array('-', 'ー', '−', '―', '‐'), '', $telephone);</pre><p>&nbsp;</p>The post <a href="https://mintaku-blog.net/whereraw-replace/">【Laravel】クエリビルダのwhereRawでハイフンをreplaceする方法</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/whereraw-replace/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">657</post-id>	</item>
		<item>
		<title>【Laravel】GROUP_BYでSQLSTATE[42000]: Syntax error or access violation: 1055 Expression</title>
		<link>https://mintaku-blog.net/laravel-groupbyerror/</link>
					<comments>https://mintaku-blog.net/laravel-groupbyerror/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Fri, 05 Oct 2018 14:58:32 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[開発技術]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=650</guid>

					<description><![CDATA[<p>LaravelでgroupBy追加後、SQLSTATE[42000]: Syntax error or access violation: 1055 Exp …</p>
The post <a href="https://mintaku-blog.net/laravel-groupbyerror/">【Laravel】GROUP_BYでSQLSTATE[42000]: Syntax error or access violation: 1055 Expression</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>LaravelでgroupBy追加後、SQLSTATE[42000]: Syntax error or access violation: 1055 Expressionエラーが発生。対処法をまとめておきます。</p>
<h2>実行環境</h2>
<ul>
<li>CentOS：7.5</li>
<li>mysql：5.7.23</li>
<li>Laravel：5.7.6</li>
</ul>
<h2>Syntax error or access violation: 1055 Expression発生</h2>
<p>LaravelクエリビルダでGROUP_BY追加後、以下のエラーが発生。</p><pre class="crayon-plain-tag">SQLSTATE[42000]: Syntax error or access violation: 1055 Expression 
#8 of SELECT list is not in GROUP BY clause and contains nonaggregated column
…</pre><p>こちらの記事を参考にして、my.cnfに以下の設定を追加。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://qiita-user-contents.imgix.net/https%3A%2F%2Fqiita-user-contents.imgix.net%2Fhttps%253A%252F%252Fcdn.qiita.com%252Fassets%252Fpublic%252Farticle-ogp-background-afbab5eb44e0b055cce1258705637a91.png%3Fixlib%3Drb-4.0.0%26w%3D1200%26blend64%3DaHR0cHM6Ly9xaWl0YS11c2VyLXByb2ZpbGUtaW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnFpaXRhLWltYWdlLXN0b3JlLnMzLmFtYXpvbmF3cy5jb20lMkYwJTJGMjQ5NzYlMkZwcm9maWxlLWltYWdlcyUyRjE0NzM2ODQyMzA_aXhsaWI9cmItNC4wLjAmYXI9MSUzQTEmZml0PWNyb3AmbWFzaz1lbGxpcHNlJmJnPUZGRkZGRiZmbT1wbmczMiZzPTJhZGVhN2RiZTAwY2Y5ODYxMGU0YzI2NjlkZGU4ZDQx%26blend-x%3D120%26blend-y%3D462%26blend-w%3D90%26blend-h%3D90%26blend-mode%3Dnormal%26mark64%3DaHR0cHM6Ly9xaWl0YS1vcmdhbml6YXRpb24taW1hZ2VzLmltZ2l4Lm5ldC9odHRwcyUzQSUyRiUyRnMzLWFwLW5vcnRoZWFzdC0xLmFtYXpvbmF3cy5jb20lMkZxaWl0YS1vcmdhbml6YXRpb24taW1hZ2UlMkZiNzY3YzZkNDBiYjk5ZDc1ZTU1MzdlZjE5MzNhYjAyN2Q0ZWIyNmEwJTJGb3JpZ2luYWwuanBnJTNGMTQ4NjAwOTc3MT9peGxpYj1yYi00LjAuMCZ3PTQ0Jmg9NDQmZml0PWNyb3AmbWFzaz1jb3JuZXJzJmNvcm5lci1yYWRpdXM9OCZiZz1GRkZGRkYmYm9yZGVyPTIlMkNGRkZGRkYmZm09cG5nMzImcz1mNDlkMzc3NzQ2NDljNTg1ZGIwNWE4ZDZmZDYxZjdjOQ%26mark-x%3D186%26mark-y%3D515%26mark-w%3D40%26mark-h%3D40%26s%3D52ffe986bd0572205510701f596d2883?ixlib=rb-4.0.0&amp;w=1200&amp;fm=jpg&amp;mark64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTk2MCZoPTMyNCZ0eHQ9TXlTUUwlMjA1LjcuNSUyQiUyMCVFMyU4MSVBNyVFMyU4MSVBRUdST1VQJTIwQlklRTMlODIlQTglRTMlODMlQTklRTMlODMlQkMmdHh0LWFsaWduPWxlZnQlMkN0b3AmdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT01NiZ0eHQtcGFkPTAmcz1jNGY3OGY0M2U4ZDY1NDNiMGUzZTdlZWQxODljMTc3Nw&amp;mark-x=120&amp;mark-y=112&amp;blend64=aHR0cHM6Ly9xaWl0YS11c2VyLWNvbnRlbnRzLmltZ2l4Lm5ldC9-dGV4dD9peGxpYj1yYi00LjAuMCZ3PTgzOCZoPTU4JnR4dD0lNDBoc2hpbW8mdHh0LWNvbG9yPSUyMzFFMjEyMSZ0eHQtZm9udD1IaXJhZ2lubyUyMFNhbnMlMjBXNiZ0eHQtc2l6ZT0zNiZ0eHQtcGFkPTAmcz1iOThmZTA3YmRlZDg3MWVlYjdlNzZlOGM3ZWFhNGE1YQ&amp;blend-x=242&amp;blend-y=454&amp;blend-w=838&amp;blend-h=46&amp;blend-fit=crop&amp;blend-crop=left%2Cbottom&amp;blend-mode=normal&amp;txt64=44Kz44Oz44K744Oz44K144K544O744OZ44Kk44K55qCq5byP5Lya56S-&amp;txt-x=242&amp;txt-y=539&amp;txt-width=838&amp;txt-clip=end%2Cellipsis&amp;txt-color=%231E2121&amp;txt-font=Hiragino%20Sans%20W6&amp;txt-size=28&amp;s=dca2624609c9b4d0bca860cb77b82257" alt="">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://qiita.com/hshimo/items/3e315dc102e3e47e4a98">MySQL 5.7.5+ でのGROUP BYエラー #MySQL - Qiita</a>
			</p>
							<div class="ys-blog-card__dscr">
					メモ 結論 5.7.5で仕様変わったから、my.cnfを変更して、前の動作させる&hellip;				</div>
										<div class="ys-blog-card__domain">qiita.com</div>
					</div>
	</div>
</div>

<p>/etc/my.cnf</p><pre class="crayon-plain-tag">[mysqld]
sql_mode=STRICT_TRANS_TABLES,NO_ZERO_IN_DATE,NO_ZERO_DATE,ERROR_FOR_DIVISION_BY_ZERO,NO_AUTO_CREATE_USER,NO_ENGINE_SUBSTITUTION</pre><p>&nbsp;</p>
<p>MySQLを再起動。</p><pre class="crayon-plain-tag">$ service mysqld restart</pre><p>うーん&#8230;。エラー変わらず。</p>
<p>&nbsp;</p>
<h2>Syntax error or access violation: 1055 Expressionを解消する方法</h2>
<p>というわけでこちらを参考にdatabase.phpを修正。</p>

<div class="ys-blog-card">
	<div class="ys-blog-card__container">
					<figure class="ys-blog-card__image">
				<img src="https://i0.wp.com/stackoverflow.com/Content/Sites/stackoverflow/Img/apple-touch-icon@2.png?w=800&#038;ssl=1" alt="" data-recalc-dims="1">			</figure>
				<div class="ys-blog-card__text">
			<p class="ys-blog-card__title">
				<a class="ys-blog-card__link" href="https://stackoverflow.com/questions/41571271/group-by-not-working-laravel?utm_medium=organic&utm_source=google_rich_qa&utm_campaign=google_rich_qa">Group by not working - Laravel - Stack Overflow</a>
			</p>
							<div class="ys-blog-card__dscr">
					I&#x27;m not able to run this simple que&hellip;				</div>
										<div class="ys-blog-card__domain">stackoverflow.com</div>
					</div>
	</div>
</div>

<p>/config/database.php</p><pre class="crayon-plain-tag">'mysql' =&gt; [
    'driver' =&gt; 'mysql',
    'host' =&gt; env('DB_HOST', 'hoge'),
    'port' =&gt; env('DB_PORT', 'hoge'),
    'database' =&gt; env('DB_DATABASE',hoge),
    'username' =&gt; env('DB_USERNAME', hoge),
    'password' =&gt; env('DB_PASSWORD', hoge),
    'unix_socket' =&gt; env('DB_SOCKET', ''),
    'charset' =&gt; 'utf8mb4',
    'collation' =&gt; 'utf8mb4_unicode_ci',
    'prefix' =&gt; '',
    'strict' =&gt; true,
    'engine' =&gt; null,
],</pre><p>以下の&#8217;strict&#8217;をtrueからfalseに修正します。</p><pre class="crayon-plain-tag">'strict' =&gt; false,</pre><p>すると無事にエラーが解消されました。</p>
<p>ただstrictモードを無効にすることはあまり良くないよう。バージョン5.7以降のMySQLサーバを使用していることが原因みたいです。</p>
<p>このバージョンからは、GROUP BYSQL99に準拠するように動作するため、やはりMySQLサーバの設定を変更することが推奨されているみたい。</p>The post <a href="https://mintaku-blog.net/laravel-groupbyerror/">【Laravel】GROUP_BYでSQLSTATE[42000]: Syntax error or access violation: 1055 Expression</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/laravel-groupbyerror/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">650</post-id>	</item>
		<item>
		<title>Laravelでページネーションを実装する方法。表示件数の指定も簡単！</title>
		<link>https://mintaku-blog.net/laravel-pagination/</link>
					<comments>https://mintaku-blog.net/laravel-pagination/#respond</comments>
		
		<dc:creator><![CDATA[みんたく]]></dc:creator>
		<pubDate>Wed, 03 Oct 2018 14:08:53 +0000</pubDate>
				<category><![CDATA[Laravel]]></category>
		<category><![CDATA[開発技術]]></category>
		<guid isPermaLink="false">https://mintaku-blog.net/?p=633</guid>

					<description><![CDATA[<p>Laravelでページネーション機能を実装したため、メモとして残しておきます。 画面に表示させる件数指定も簡単にできます。 Laravelでページネーション …</p>
The post <a href="https://mintaku-blog.net/laravel-pagination/">Laravelでページネーションを実装する方法。表示件数の指定も簡単！</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></description>
										<content:encoded><![CDATA[<p>Laravelでページネーション機能を実装したため、メモとして残しておきます。</p>
<p>画面に表示させる件数指定も簡単にできます。</p>
<h2>Laravelでページネーション機能を実装する</h2>
<p>DBのテーブルは以下のように設定。</p>
<p><img data-attachment-id="640" data-permalink="https://mintaku-blog.net/laravel-pagination/db/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/db.png?fit=639%2C290&amp;ssl=1" data-orig-size="639,290" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="db" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/db.png?fit=300%2C136&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/db.png?fit=639%2C290&amp;ssl=1" loading="lazy" class="aligncenter wp-image-640" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/db.png?resize=400%2C182" alt="" width="400" height="182" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/db.png?w=639&amp;ssl=1 639w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/db.png?resize=300%2C136&amp;ssl=1 300w" sizes="(max-width: 400px) 100vw, 400px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<p>モデルのperPageに値を格納することで、1ページに何件表示するか設定できます。</p>
<p>app\Movie.php</p><pre class="crayon-plain-tag"> &lt;?php

  namespace App;
  use Illuminate\Database\Eloquent\Model;

     class Movie extends Model
    {   
        protected $fillable = [
            // protected $perPage = 1;
　        ];
    }</pre><p>&nbsp;</p>
<p>ルーティングを設定。</p>
<p>routes\web.php</p><pre class="crayon-plain-tag">Route::get('/list', 'MovieController@getIndex');</pre><p>&nbsp;</p>
<h3>画面に表示させる件数を指定する方法</h3>
<p>paginate()のカッコ内で何件表示するか指定できます</p>
<p>今回は、1ページに3件取得するよう設定。</p>
<p>app\Http\Controllers\MovieController.php</p><pre class="crayon-plain-tag">&lt;?php

   namespace App\Http\Controllers;
   use App\Movie;

   class MovieController extends Controller
   {   
        public function getIndex()
        {
             $data = Movie::paginate(3);

             return view('movie.index', compact('data'));
        }
    }</pre><p>&nbsp;</p>
<p>共通テンプレートを追加。</p>
<p>resources\views\layouts\app.blade.php</p><pre class="crayon-plain-tag">&lt;!doctype html&gt;
    &lt;html&gt;
        &lt;head&gt;
            &lt;meta charset="utf-8"&gt;
            &lt;link rel="stylesheet" href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.5/css/bootstrap.min.css"&gt;
        &lt;/head&gt;
        &lt;body&gt;
            @yield('content')
        &lt;/body&gt;
    &lt;/html&gt;</pre><p>&nbsp;</p>
<p>{{ $data-&gt;links() }}を追加して、ページネーションを実装します。</p>
<p>resources\views\movie\index.blade.php</p><pre class="crayon-plain-tag">@extends('layouts.app')
@section('content')
    &lt;table class="table table-striped"&gt;
        &lt;tr&gt;
            &lt;th&gt;&lt;/th&gt;
            &lt;th&gt;タイトル&lt;/th&gt;
            &lt;th&gt;興行収入(億)&lt;/th&gt;
            &lt;th&gt;公開年&lt;/th&gt;
        &lt;/tr&gt;
        @foreach($data as $item)
            &lt;tr&gt;
                &lt;td&gt;{{{ $item-&gt;id }}}&lt;/td&gt;
                &lt;td&gt;{{{ $item-&gt;title }}}&lt;/td&gt;
                &lt;td&gt;{{{ $item-&gt;income }}}&lt;/td&gt;
                &lt;td&gt;{{{ $item-&gt;year }}}&lt;/td&gt;
            &lt;/tr&gt;
        @endforeach
    &lt;/table&gt;

{{ $data-&gt;links() }}

@endsection

</pre><p>&nbsp;</p>
<p>ページにアクセスすると以下のような画面が表示され、ページネーションが実装されていることが確認できます。</p>
<p><img data-attachment-id="638" data-permalink="https://mintaku-blog.net/laravel-pagination/aa/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/aa.png?fit=1145%2C340&amp;ssl=1" data-orig-size="1145,340" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="aa" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/aa.png?fit=300%2C89&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/aa.png?fit=800%2C238&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-638" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/aa-1024x304.png?resize=800%2C238" alt="" width="800" height="238" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/aa.png?resize=1024%2C304&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/aa.png?resize=300%2C89&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/aa.png?resize=768%2C228&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/aa.png?w=1145&amp;ssl=1 1145w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p><img data-attachment-id="639" data-permalink="https://mintaku-blog.net/laravel-pagination/bb/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/bb.png?fit=1150%2C298&amp;ssl=1" data-orig-size="1150,298" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="bb" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/bb.png?fit=300%2C78&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/bb.png?fit=800%2C207&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-639" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/bb-1024x265.png?resize=800%2C207" alt="" width="800" height="207" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/bb.png?resize=1024%2C265&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/bb.png?resize=300%2C78&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/bb.png?resize=768%2C199&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/bb.png?w=1150&amp;ssl=1 1150w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>&nbsp;</p>
<h3>ページネーションを前後移動にする方法</h3>
<p>simpePaginateにすることで、ページネーションを前後移動に変更できます。</p>
<p>app\Http\Controllers\MovieController.php</p><pre class="crayon-plain-tag">&lt;?php
    namespace App\Http\Controllers;
    use App\Movie;
        
        class MovieController extends Controller
        {   
            public function getIndex()
            {       
                $data = Movie::simpePaginate(3);
   
                return view('movie.index', compact('data'));
            }
        }</pre><p>&nbsp;</p>
<p>ページにアクセスすると以下の画面のようにページネーションが変更されていることを確認できます。</p>
<p><img data-attachment-id="641" data-permalink="https://mintaku-blog.net/laravel-pagination/cc/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/cc.png?fit=1150%2C350&amp;ssl=1" data-orig-size="1150,350" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="cc" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/cc.png?fit=300%2C91&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/cc.png?fit=800%2C244&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-641" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/cc-1024x312.png?resize=800%2C244" alt="" width="800" height="244" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/cc.png?resize=1024%2C312&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/cc.png?resize=300%2C91&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/cc.png?resize=768%2C234&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/cc.png?w=1150&amp;ssl=1 1150w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p><img data-attachment-id="642" data-permalink="https://mintaku-blog.net/laravel-pagination/dd/" data-orig-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/dd.png?fit=1150%2C302&amp;ssl=1" data-orig-size="1150,302" data-comments-opened="1" data-image-meta="{&quot;aperture&quot;:&quot;0&quot;,&quot;credit&quot;:&quot;&quot;,&quot;camera&quot;:&quot;&quot;,&quot;caption&quot;:&quot;&quot;,&quot;created_timestamp&quot;:&quot;0&quot;,&quot;copyright&quot;:&quot;&quot;,&quot;focal_length&quot;:&quot;0&quot;,&quot;iso&quot;:&quot;0&quot;,&quot;shutter_speed&quot;:&quot;0&quot;,&quot;title&quot;:&quot;&quot;,&quot;orientation&quot;:&quot;0&quot;}" data-image-title="dd" data-image-description="" data-image-caption="" data-medium-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/dd.png?fit=300%2C79&amp;ssl=1" data-large-file="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/dd.png?fit=800%2C210&amp;ssl=1" loading="lazy" class="aligncenter size-large wp-image-642" src="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/dd-1024x269.png?resize=800%2C210" alt="" width="800" height="210" srcset="https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/dd.png?resize=1024%2C269&amp;ssl=1 1024w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/dd.png?resize=300%2C79&amp;ssl=1 300w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/dd.png?resize=768%2C202&amp;ssl=1 768w, https://i0.wp.com/mintaku-blog.net/mintaku/wp-content/uploads/2018/10/dd.png?w=1150&amp;ssl=1 1150w" sizes="(max-width: 800px) 100vw, 800px" data-recalc-dims="1" /></p>
<p>Laravelはこんなにも簡単にページネーションが実装できるとは。</p>The post <a href="https://mintaku-blog.net/laravel-pagination/">Laravelでページネーションを実装する方法。表示件数の指定も簡単！</a> first appeared on <a href="https://mintaku-blog.net">みんたく</a>.]]></content:encoded>
					
					<wfw:commentRss>https://mintaku-blog.net/laravel-pagination/feed/</wfw:commentRss>
			<slash:comments>0</slash:comments>
		
		
		<post-id xmlns="com-wordpress:feed-additions:1">633</post-id>	</item>
	</channel>
</rss>
