Skip to content

Commit 32fd9fd

Browse files
committed
Merge pull request #85 from ytake/translate-file
Translate file
2 parents 8c5eabe + 3b19385 commit 32fd9fd

3 files changed

Lines changed: 196 additions & 1 deletion

File tree

app/App/Repositories/Fluent/AnalyticsRepository.php

Lines changed: 1 addition & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -76,7 +76,7 @@ function ($scores){
7676
public function getDisableKey()
7777
{
7878
$redis = \Redis::connection('default');
79-
$previous = date("Ymd", strtotime("0day", strtotime(date("Ymd"))));
79+
$previous = date("Ymd", strtotime("- 1day", strtotime(date("Ymd"))));
8080
$result = $redis->keys(self::SET_PREFIX . "{$previous}*");
8181
if(count($result)) {
8282
$redis->pipeline(
Lines changed: 87 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,87 @@
1+
---
2+
Title: ファサードクラス一覧
3+
Topics: -
4+
Position: 7
5+
---
6+
7+
{problem}
8+
ファサードを介さずにクラスを利用したい
9+
ファサードと関連付いたクラスがどれかわからない
10+
11+
これらはLaraveの構造を理解する上でも大きなヒントになります
12+
{/problem}
13+
14+
{solution}
15+
これらは公式リファレンスなどにも明記されていますが、
16+
ファサードと実際のクラスの一覧は次の通りです
17+
18+
[ファサードクラス一覧](http://laravel4.kore1server.com/docs/facades#facade-class-reference)
19+
[Facade Class Reference](http://laravel.com/docs/facades#facade-class-reference)
20+
21+
実際にファサードを利用しない場合は次の様になります
22+
23+
```php
24+
<?php
25+
namespace Acme\Controllers;
26+
27+
use Illuminate\Config\Repository as Config;
28+
29+
class HomeController extends BaseController
30+
{
31+
32+
/** @var Config */
33+
protected $config;
34+
35+
/**
36+
* @param Config $config
37+
*/
38+
public function __construct(Config $config)
39+
{
40+
$this->config = $config;
41+
}
42+
}
43+
```
44+
45+
上記の様にコンストラクタインジェクションを利用するか、
46+
必要に応じてインスタンスを生成することでファサードを利用しないコーディングが可能です
47+
48+
またこれらはパッケージ開発時にも有用です
49+
ファサードと実際のクラスの関連を理解する事で、ファサードを利用したテストコードが苦手な方や、
50+
Laravelコンポーネントを利用しつつも、フレームワークにあまり依存しないパッケージ作りなども可能です
51+
52+
{/solution}
53+
54+
{discussion}
55+
これらはサービスプロバイダーでの実装にも使用する事が出来ます
56+
57+
フィルターやviewコンポーザー等を登録する場合は、
58+
`global.php`に記述せずに、以下の様にサービスプロバイダーで実装することもできます
59+
60+
```php
61+
<?php
62+
namespace App\Providers;
63+
64+
use Illuminate\Support\ServiceProvider;
65+
66+
class ApplicationServiceProvider extends ServiceProvider
67+
{
68+
69+
public function register()
70+
{
71+
// view composer
72+
$this->app->view->composer('index', 'App\Composers\IndexComposer');
73+
// register filter
74+
$this->app->router->filter('user.filter', 'App\Filters\UserFilter');
75+
}
76+
}
77+
```
78+
79+
`$this->app``Illuminate\Container\Container`を継承した`Illuminate\Foundation\Application`オブジェクトです
80+
IoCコンテナを利用してそれぞれのインスタンスにアクセスする事が出来ます
81+
82+
パッケージ作りや、ソースコードのリファクタリングなどに利用してみましょう
83+
{/discussion}
84+
85+
{credit}
86+
Author:Yuuki Takezawa
87+
{/credit}

docs/recipes/db/db-connection.md

Lines changed: 108 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,108 @@
1+
---
2+
Title: データベースの接続先を変更する
3+
Topics: database
4+
Position: 1
5+
---
6+
7+
{problem}
8+
アプリケーションで複数のデータベースを利用したい
9+
10+
Laravelではシンプルなマスタースレーブ構成のデータベースに対して自動的にコネクションを振り分ける機能と、
11+
明示的に接続先を指定する事が出来ます
12+
{/problem}
13+
14+
{solution}
15+
`app/config/database.php` または `app/config/{environment}/database.php` に接続したい環境を記述します
16+
17+
### read / write を自動で分けたい時
18+
read/writeを明示的に指定する事無く、
19+
自動的に接続先を解決したいときは次の様に指定します
20+
21+
```php
22+
'connections' => [
23+
'mysql' => [
24+
'read' => [
25+
'host' => '192.168.1.12',
26+
],
27+
'write' => [
28+
'host' => '192.168.1.13'
29+
],
30+
'driver' => 'mysql',
31+
'database' => 'database',
32+
'username' => 'user',
33+
'password' => 'password',
34+
'charset' => 'utf8',
35+
'collation' => 'utf8_unicode_ci',
36+
'prefix' => '',
37+
],
38+
]
39+
```
40+
41+
writeにマスターを指定し、readにはスレーブを指定します
42+
43+
データベースが一般的なスレーブマスター構成の場合にこれを利用すると、
44+
Laravelのデータベースコンポーネント内部で自動的に接続先が解決されます
45+
46+
`DB`ファサード、または`Eloquent`を使用する場合も、明示的に指定する必要はありません
47+
48+
### データベースの接続先を明示的に指定する
49+
シンプルなマスタースレーブ構成以外にも、
50+
複数のデータベースを利用する事が多々あります
51+
52+
例えば:
53+
1. データ分散化の為に物理的にデータベースサーバが異なる場合
54+
2. マスター、スレーブそれぞれのユーザー、パスワードが異なる
55+
3. アプリケーションでMySQL, PostgreSQL, SQL Serverなど複数のデータベースを利用する
56+
などがあります
57+
58+
明示的に接続先を指定する場合は下記の様に記述します
59+
```php
60+
'mysql_master' => [
61+
'driver' => 'mysql',
62+
'host' => '192.168.1.12',
63+
'database' => 'database',
64+
'username' => 'user',
65+
'password' => 'password',
66+
'charset' => 'utf8',
67+
'collation' => 'utf8_unicode_ci',
68+
'prefix' => '',
69+
],
70+
'mysql_slave' => [
71+
'driver' => 'mysql',
72+
'host' => '192.168.1.12',
73+
'database' => 'database',
74+
'username' => 'user',
75+
'password' => 'password',
76+
'charset' => 'utf8',
77+
'collation' => 'utf8_unicode_ci',
78+
'prefix' => '',
79+
],
80+
```
81+
82+
データベースに接続する際に、下記の様に指定します
83+
```php
84+
// basic
85+
\DB::connection('mysq_slave')->select(...);
86+
87+
// queryBuilder
88+
\DB::connection('mysq_master')->table->('table_name')->insert(...);
89+
\DB::connection('mysq_slave')->table->('table_name')->get();
90+
91+
// eloquent
92+
User::on('mysql_slave')->find(1);
93+
```
94+
95+
デフォルトでサポートしているそれぞれのデータベースドライバーは、
96+
接続先がMySQLやPostgreSQLであっても、意識する事無く複数の環境を一つのアプリケーションで利用できる様になります
97+
98+
`connection()`省略した場合は **default** に指定されている接続先が利用されます
99+
{/solution}
100+
101+
{discussion}
102+
データベースだけではなく、redisの接続先指定の方法もほど同様の方法です
103+
レプリケーションの設定方法等は各データベースのマニュアル等をご覧ください
104+
{/discussion}
105+
106+
{credit}
107+
Author:Yuuki Takezawa
108+
{/credit}

0 commit comments

Comments
 (0)