CakePHP3.x × AzureSQLでCannot describe XXXXX. It has 0 columns.

Posted in Azure, CakePHP, DB, PHP関連, SQLServer on 9月 6th, 2016 by Site Administrator

CakePHP3.x と AzureSQLの組み合わせで「Cannot describe XXXXX. It has 0 columns.」
というエラーが発生してpaginate等ができない場合の話。

app.phpのDatasourcesの設定で、’database’と共に’schema’も設定するとエラーが解消する。
CookBook読む限りだとPostgreSQL用の設定のようだが、SQLServerでも設定は有効。

ASP.NET MVC コードファースト データをJOINして一括取得

Posted in ASP.NET, DB on 7月 11th, 2011 by Site Administrator
Public Class Data1Record
    Public Property id As Integer
    Public Property item_id As Integer
    Public Overridable Property Item() As Data2Record
End Class

上記のようにエンティティモデルにOverridable Propertyを設定すると、対象のデータが
遅延ロード可能になります。これを遅延ではなく、joinした形でまとめてデータを取得したい場合は

    Function Index() As ViewResult
        Dim data = db.Data1Records.Include("Item").ToList()
        Return View(data)
    End Function

上記のようIncludeで対象Propertyを指定することによって、joinしてデータを一括取得できます。

ASP.NET MVC コードファースト エンティティクラスの継承

Posted in ASP.NET, DB on 7月 8th, 2011 by Site Administrator
Imports System.ComponentModel.DataAnnotations
Public Class Test1Item
    <Key()>
    <DatabaseGenerated(DatabaseGeneratedOption.Identity)>
    Public Property id As Integer
    Public Property data1 As String
End Class

Public Class Test2Item : Inherits Test1Item
    Public Property data2 As String
End Class

Public Class Test3Item : Inherits Test2Item
    Public Property data3 As String
End Class

Public Class Test4Item : Inherits Test2Item
    Public Property data4 As String
End Class

Public Class Test5Item : Inherits Test2Item
    Public Property data5 As String
End Class

上記のようにエンティティクラスを継承していき、それぞれで一つずつプロパティを増やしていきます。

Imports System.Data.Entity

Public Class TestContext : Inherits DbContext
    Public Property Test1Items As DbSet(Of Test1Item)
End Class

上記のようにコンテキストの設定を行い、最基底のTest1Itemを取得してみます。
CREATE TABLE [dbo].[Test1Item] (
[id] int NOT NULL IDENTITY(1,1) ,
[data1] nvarchar(200) COLLATE Japanese_CI_AS NOT NULL ,
)
DBは上記のように、最基底のアイテムのみ保持しています。

これで発行されるSQLは下記の通り。
SELECT
[Extent1].[Discriminator] AS [Discriminator],
[Extent1].[id] AS [id],
[Extent1].[data1] AS [data1],
[Extent1].[data2] AS [data2],
[Extent1].[data3] AS [data3],
[Extent1].[data4] AS [data4],
[Extent1].[data5] AS [data5]
FROM [dbo].[Test1Item] AS [Extent1]
WHERE [Extent1].[Discriminator] IN (‘Test2Item’,’Test3Item’,’Test4Item’,’Test5Item’,’Test1Item’)

継承先のすべてのアイテム定義が含まれてしまうんですね・・・。
各テーブル共通項目を基底クラスに定義して、各エンティティクラスを継承して作成したかったのですが、
2重3重で継承する際は要注意ですね。

SQLServer 2008 R2 IDENTITY指定カラムへのINSERT

Posted in DB, SQLServer on 6月 15th, 2011 by Site Administrator

http://social.msdn.microsoft.com/Forums/ja-JP/aspnetja/thread/978e78e7-65c5-47b2-913f-efe7893554d4

ちょっとはまりました。
IDENTITYを指定したカラムのデータを指定した状態でデータをINSERTすると、
「列リストが使用されていて、IDENTITY_INSERT が ON のときに限り、~」
というエラーが発生してINSERTが失敗します。

これを回避する条件は2つ
・セッション内で、「SET IDENTITY_INSERT テーブル名 ON」を行うこと
・発行するINSERT文は、各カラムを明示的に定義すること
 ○:INSERT INTO [テーブル名] ([id],[user_id]) VALUES (N’1′, N’0′);
 ×:INSERT INTO [テーブル名] VALUES (N’1′, N’0′);

Navicatを使ってMySQL→SQLSererへデータの移行をしている際に少しはまりました。

CakePHP(1.3.8) SQLServerとの接続

Posted in CakePHP, DB, SQLServer on 6月 8th, 2011 by Site Administrator

http://www.greendesign.biz/sql-server-driver-for-php%E3%81%AE%E3%82%A4%E3%83%B3%E3%82%B9%E3%83%88%E3%83%BC%E3%83%AB/
こちらを参考に接続設定を行いました

1.SQL Server Driver for PHPのダウンロード
http://www.microsoft.com/downloads/en/details.aspx?FamilyID=80e44913-24b4-4113-8807-caae6cf2ca05

2.PHPへのドライバの設定
C:xamppphpextへ、適切なドライバをコピーし、php.iniに設定記載。
extension=php_sqlsrv_53_ts_vc6.dll
extension=php_pdo_sqlsrv_53_ts_vc6.dll

3.Apache再起動

4.CakePHPのDATABASE_CONFIGを設定
・‘driver’ は ‘sqlsrv’ を設定
・’charset’ => ‘UTF-8′ を追加(’encoding’ に設定してもダメ。また ‘utf8’ でもダメ)

5.dbo_sqlsrv.php を appmodelsdatasourcesdbo に配置
https://github.com/cakephp/datasources/tree/master/models/datasources/dbo/
ここからダウンロード

SQLServer 2008 R2 外部からのDB接続

Posted in DB, SQLServer on 6月 3rd, 2011 by Site Administrator

1.ファイアーウォールでポート1433(標準)が空いていることを確認
2.SQLServer構成マネージャ→SQLServerネットワークの構成→プロトコルで、TCP/IPが有効であることを確認
3.接続ユーザーアカウントが適切であることを確認

CakePHP (1.3) 大量のクエリを投げるときの注意点

Posted in CakePHP, DB, PHP関連 on 11月 8th, 2010 by Site Administrator

http://1-byte.jp/2010/10/29/too_many_queries_on_cakephp/
大量にクエリを発行する際、キャッシュが短い周期で被っちゃうみたいです。
「数万件のデータで衝突が発生する」とのことで、大量クエリが想定される場合は
「DboSourceクラスのcacheMethodsプロパティをfalseに設定すれば良い」とのことです。

phpmyadmin 認証追加

Posted in DB, PHP関連 on 9月 8th, 2010 by Site Administrator

/phpmyadmin/config.inc.phpを編集
$cfg[‘Servers’][$i][‘auth_type’] = ‘config’;

$cfg[‘Servers’][$i][‘auth_type’] = ‘http’;

mysql テーブルサイズ取得

Posted in DB on 8月 29th, 2010 by Site Administrator

show table status from DB名 like ‘table名’;

Data_lengthがテーブルサイズ