<?xml version="1.0" encoding="utf-8"?><rss xmlns:dc="http://purl.org/dc/elements/1.1/" version="2.0"><channel><title>服务端开发技术分享</title><link>https://www.htmlcms.cn/</link><description>Good Luck To You!</description><item><title>curl网页采集相关</title><link>https://www.htmlcms.cn/?id=18</link><description>&lt;ol style=&quot;list-style-type: decimal;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;Accept-Encoding需要单独设置，不能放在header里，对应curl 的CURLOPT_ENCODING属性。。如果采集到的网页是乱码，可以设置这个为gzip,deflate试试&lt;/p&gt;&lt;/li&gt;&lt;ol style=&quot;list-style-type: lower-alpha;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;//&amp;nbsp;例：
curl_setopt($curl,&amp;nbsp;CURLOPT_ENCODING,&amp;nbsp;&amp;#39;gzip,deflate&amp;#39;);&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;使用SimpleHTMLDom解析HTML（第三方库）&lt;/p&gt;&lt;/li&gt;&lt;ol style=&quot;list-style-type: lower-alpha;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;//&amp;nbsp;使用composer安装
composer&amp;nbsp;require&amp;nbsp;sunra/php-simple-html-dom-parser&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;//&amp;nbsp;示例
require&amp;nbsp;&amp;#39;vendor/autoload.php&amp;#39;;&amp;nbsp;//&amp;nbsp;引入自动加载文件
$html&amp;nbsp;=&amp;nbsp;file_get_contents(&amp;#39;http://example.com&amp;#39;);
$dom&amp;nbsp;=&amp;nbsp;new&amp;nbsp;simple_html_dom();$dom-&amp;gt;load($html);
foreach($dom-&amp;gt;find(&amp;#39;a&amp;#39;)&amp;nbsp;as&amp;nbsp;$element)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$element-&amp;gt;href&amp;nbsp;.&amp;nbsp;&amp;#39;&amp;lt;br&amp;gt;&amp;#39;;&amp;nbsp;//&amp;nbsp;获取所有链接的href属性
}
$dom-&amp;gt;clear();&amp;nbsp;//&amp;nbsp;清除DOM对象以释放内存&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;使用Guzzle（HTTP客户端）和Symfony的DomCrawler（DOM操作）&lt;/p&gt;&lt;/li&gt;&lt;ol style=&quot;list-style-type: lower-alpha;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;//&amp;nbsp;&amp;nbsp;使用composer安装
composer&amp;nbsp;require&amp;nbsp;guzzlehttp/guzzle&amp;nbsp;symfony/dom-crawler&amp;nbsp;symfony/css-selecto&lt;/pre&gt;&lt;/li&gt;&lt;li&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;//&amp;nbsp;&amp;nbsp;示例
require&amp;nbsp;&amp;#39;vendor/autoload.php&amp;#39;;&amp;nbsp;//&amp;nbsp;引入自动加载文件
use&amp;nbsp;GuzzleHttp\Client;
use&amp;nbsp;Symfony\Component\DomCrawler\Crawler;

$client&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Client();
$response&amp;nbsp;=&amp;nbsp;$client-&amp;gt;request(&amp;#39;GET&amp;#39;,&amp;nbsp;&amp;#39;http://example.com&amp;#39;);
$html&amp;nbsp;=&amp;nbsp;(string)&amp;nbsp;$response-&amp;gt;getBody();
$crawler&amp;nbsp;=&amp;nbsp;new&amp;nbsp;Crawler($html);
$links&amp;nbsp;=&amp;nbsp;$crawler-&amp;gt;filter(&amp;#39;a&amp;#39;);&amp;nbsp;//&amp;nbsp;获取所有链接的节点集合
foreach&amp;nbsp;($links&amp;nbsp;as&amp;nbsp;$link)&amp;nbsp;{
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;echo&amp;nbsp;$link-&amp;gt;getAttribute(&amp;#39;href&amp;#39;)&amp;nbsp;.&amp;nbsp;&amp;quot;\n&amp;quot;;&amp;nbsp;//&amp;nbsp;获取链接的href属性
}&lt;/pre&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;总结：&lt;/p&gt;&lt;p&gt;选择哪种方法取决于你的具体需求，比如是否需要处理复杂的HTML结构、是否需要处理大量数据等。对于大多数情况，SimpleHTMLDom和Guzzle+DomCrawler的结合使用是比较方便和强大的选择。如果你需要处理非常复杂的HTML或者需要更高级的HTTP功能，那么使用Guzzle和DOMDocument可能是更好的选择。对于简单的需求，file_get_contents()和DOMDocument或SimpleHTMLDom已经足够了。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;</description><pubDate>Tue, 10 Feb 2026 10:22:21 +0800</pubDate></item><item><title>thinkphp前后端分离，如何使用think-captcha？</title><link>https://www.htmlcms.cn/?id=17</link><description>&lt;ol style=&quot;list-style-type: decimal;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp; captcha配置文件增加 &amp;#39;api&amp;#39; =&amp;gt; true,。。如果是单应用，增加全局的captcha配置文件中，如果是多应用，复制全局captcha配置文件到对应应用的config目录，然后增加或只保留 &amp;#39;api&amp;#39; =&amp;gt; true,。。&lt;/p&gt;&lt;/li&gt;&lt;ol style=&quot;list-style-type: lower-alpha;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;如果所有应用都是前后端分离，直接增加到全局的captcha配置文件中应该就可以（本条未测试）&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;li&gt;&lt;p&gt;增加后，Captcha::create() 会返回一个数组，数组中包含验证码code，和验证码图片的base64格式，将code存到缓存中，或以自己的习惯保存，将验证码图片返回给前端。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;验证时，如果逻辑上要求大小写一致，直接比较即可；如果不区分大小写，需要将保存的code和传过来的验证码都转换为大写或小写，再进行比较。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;注意：调用 Captcha::create()，引入的是think\captcha\facade\Captcha。&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;br/&gt;</description><pubDate>Tue, 16 Dec 2025 11:17:26 +0800</pubDate></item><item><title>thinkphp升级后报错Declaration of think\app\Url::build() must be compatible with think\route\Url::build()</title><link>https://www.htmlcms.cn/?id=16</link><description>1.&amp;nbsp;出现这个错误的原因是，你通过命令“composer update topthink/framework”只升级了框架，没有更新多应用扩展模块。&lt;br/&gt;2.&amp;nbsp;只需要composer运行下面代码更新多应用扩展模块到最新版后即可解决：&lt;br/&gt;&amp;nbsp; &amp;nbsp; 1.&amp;nbsp;composer update topthink/think-multi-app&lt;br/&gt;&amp;nbsp; &amp;nbsp; 2.&amp;nbsp;更新完成后，项目运行正常。</description><pubDate>Sun, 12 Oct 2025 11:35:12 +0800</pubDate></item><item><title>thinkphp6 多应用模式下，多个应用都需要使用图片验证码时，会共用验证码，让每个应用使用自己的验证码</title><link>https://www.htmlcms.cn/?id=15</link><description>1.&amp;nbsp;关闭框架层的中间件中的默认会话初始化；&lt;br/&gt;2.&amp;nbsp;给各个应用的中间件开启（增加）会话初始化；&lt;br/&gt;3.&amp;nbsp;会话初始化需要 开启/关闭 的中间件：\think\middleware\SessionInit::class。</description><pubDate>Sun, 10 Aug 2025 15:30:25 +0800</pubDate></item><item><title>laravel 安装</title><link>https://www.htmlcms.cn/?id=14</link><description>&lt;p&gt;一、laravel 安装&lt;/p&gt;&lt;p&gt;1、laravel 最新版本安装&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;composer&amp;nbsp;global&amp;nbsp;require&amp;nbsp;&amp;quot;laravel/installer&amp;quot;&amp;nbsp;&amp;nbsp;#使用Composer下载Laravel安装程序
laravel&amp;nbsp;new&amp;nbsp;XXX&amp;nbsp;&amp;nbsp;#创建一个laravel项目,XXX为项目名称&lt;/pre&gt;&lt;p&gt;2、laravel 指定版本安装&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;composer&amp;nbsp;create-project&amp;nbsp;laravel/laravel&amp;nbsp;XXX&amp;nbsp;--prefer-dist&amp;nbsp;&amp;quot;6.0.*&amp;quot;&amp;nbsp;#XXX表示项目名称,6.0.*表示版本号&lt;/pre&gt;&lt;p&gt;&lt;strong&gt;注意：选择 Laravel 版本时，应该 优先考虑 LTS 版本，因为安全性和稳定性考虑，商业项目开发中 不应该 使用最新版本的 『Laravel 一般发行版』&lt;/strong&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;二、检测laravel是否安装成功&lt;/p&gt;&lt;p&gt;1、查看laravel安装版本&lt;/p&gt;&lt;p&gt;项目根目录输入&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-bash&quot;&gt;php&amp;nbsp;artisan&amp;nbsp;--version&lt;/pre&gt;&lt;p&gt;&lt;img src=&quot;https://www.htmlcms.cn/zb_users/upload/2025/07/202507191752913314884121.png&quot; alt=&quot;b4ddbd19454b28f2a96772e1dd337be1_e0e8297d672a40f3c6e098f8e79c7311.png&quot;/&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;2、访问laravel项目&lt;/p&gt;&lt;p&gt;配置域名指向项目的public目录&lt;/p&gt;&lt;p&gt;&lt;img src=&quot;https://www.htmlcms.cn/zb_users/upload/2025/07/202507191752913368287373.png&quot; alt=&quot;e85cd136b68fa9a57c69749056997f8b_7eee6252a62832c35ca7d2957cefd491.png&quot;/&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;参考来源：https://blog.csdn.net/huaweichenai/article/details/128898769&lt;/p&gt;</description><pubDate>Sun, 15 Jun 2025 11:19:18 +0800</pubDate></item><item><title>git报错: fatal: bad object HEAD</title><link>https://www.htmlcms.cn/?id=13</link><description>&lt;h3&gt;一般问题原因：&lt;/h3&gt;&lt;p&gt;.git内文件有问题，比如误删除了一些文件（我就是因为.git\objects\pack文件夹过大，删除了这个文件夹）。&lt;br/&gt;&lt;/p&gt;&lt;h3&gt;处理建议：&lt;/h3&gt;&lt;ol style=&quot;list-style-type: decimal;&quot; class=&quot; list-paddingleft-2&quot;&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;在其他盘符或文件夹把项目拉下来，然后复制.git文件夹到要操作的文件夹覆盖，然后继续操作。&lt;/p&gt;&lt;/li&gt;&lt;li&gt;&lt;p&gt;&amp;nbsp;将修改过的文件在新拉下来的文件夹修改后，继续操作。&lt;br/&gt;&lt;/p&gt;&lt;/li&gt;&lt;/ol&gt;&lt;p&gt;以上建议二选一即可。&lt;/p&gt;</description><pubDate>Sun, 13 Apr 2025 11:46:32 +0800</pubDate></item><item><title>MySQL 3个字段作为一个字段输出</title><link>https://www.htmlcms.cn/?id=12</link><description>&lt;p&gt;在MySQL中，如果你想将3个字段合并成一个字段输出，可以使用CONCAT()函数或者CONCAT_WS()函数。这两个函数都可以用来连接字符串，但CONCAT_WS()允许你指定一个分隔符。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;1. 使用CONCAT() &lt;/strong&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;CONCAT()函数直接将多个字符串连接起来，不添加任何分隔符。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-sql&quot;&gt;SELECT&amp;nbsp;CONCAT(field1,&amp;nbsp;field2,&amp;nbsp;field3)&amp;nbsp;AS&amp;nbsp;combined_field&amp;nbsp;FROM&amp;nbsp;your_table;&lt;/pre&gt;&lt;p&gt;这里，field1, field2, field3是你想要合并的字段名，your_table是你的表名。combined_field是合并后的字段的别名。&lt;/p&gt;&lt;p&gt;&lt;strong&gt;2. 使用CONCAT_WS()&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;如果你需要在字段之间添加一个分隔符，可以使用CONCAT_WS()函数。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-sql&quot;&gt;SELECT&amp;nbsp;CONCAT_WS(&amp;#39;&amp;nbsp;&amp;#39;,&amp;nbsp;field1,&amp;nbsp;field2,&amp;nbsp;field3)&amp;nbsp;AS&amp;nbsp;combined_field&amp;nbsp;FROM&amp;nbsp;your_table;&lt;/pre&gt;&lt;p&gt;在这个例子中，&amp;#39; &amp;#39;是分隔符（一个空格），它将field1, field2, field3之间用空格连接起来。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;示例&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;假设你有一个表employees，包含字段first_name, last_name, department，你想将这三个字段合并成一个字段输出，每个字段之间用逗号和空格分隔。&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-sql&quot;&gt;SELECT&amp;nbsp;CONCAT_WS(&amp;#39;,&amp;nbsp;&amp;#39;,&amp;nbsp;first_name,&amp;nbsp;last_name,&amp;nbsp;department)&amp;nbsp;AS&amp;nbsp;full_info&amp;nbsp;FROM&amp;nbsp;employees;&lt;/pre&gt;&lt;p&gt;这样，每行将显示为“first_name, last_name, department”的形式。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;&lt;strong&gt;&lt;em&gt;* 注意事项&lt;/em&gt;&lt;/strong&gt;&lt;/p&gt;&lt;p&gt;确保在连接字段时，这些字段不是NULL，否则结果中可能会包含NULL值或者NULL字符。你可以使用COALESCE()函数来处理可能的NULL值，&lt;/p&gt;&lt;p&gt;例如：&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-sql&quot;&gt;SELECT&amp;nbsp;CONCAT_WS(&amp;#39;,&amp;nbsp;&amp;#39;,&amp;nbsp;COALESCE(field1,&amp;nbsp;&amp;#39;&amp;#39;),&amp;nbsp;COALESCE(field2,&amp;nbsp;&amp;#39;&amp;#39;),&amp;nbsp;COALESCE(field3,&amp;nbsp;&amp;#39;&amp;#39;))&amp;nbsp;AS&amp;nbsp;combined_field&amp;nbsp;FROM&amp;nbsp;your_table;&lt;/pre&gt;&lt;p&gt;这样，如果任一字段为NULL，它将被替换为空字符串(&amp;#39;&amp;#39;)，从而避免NULL值影响结果。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;使用这些方法，你可以灵活地将多个字段合并为一个字段输出。&lt;/p&gt;</description><pubDate>Sun, 16 Feb 2025 11:32:40 +0800</pubDate></item><item><title>PHP去除数组中的  0</title><link>https://www.htmlcms.cn/?id=11</link><description>&lt;p&gt;1. 使用array_filter()函数&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;$array&amp;nbsp;=&amp;nbsp;[1,&amp;nbsp;0,&amp;nbsp;2,&amp;nbsp;0,&amp;nbsp;3,&amp;nbsp;0];
$array&amp;nbsp;=&amp;nbsp;array_filter($array,&amp;nbsp;function($value){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$value&amp;nbsp;!==&amp;nbsp;0;
});&lt;/pre&gt;&lt;p&gt;2. 使用foreach循环遍历数组，并用unset()删除索引对应的元素&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;$array&amp;nbsp;=&amp;nbsp;[1,&amp;nbsp;0,&amp;nbsp;2,&amp;nbsp;0,&amp;nbsp;3,&amp;nbsp;0];
foreach($array&amp;nbsp;as&amp;nbsp;$key&amp;nbsp;=&amp;gt;&amp;nbsp;$value){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;if($value&amp;nbsp;===&amp;nbsp;0){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;unset($array[$key]);
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;}
}&lt;/pre&gt;&lt;p&gt;3. 使用array_diff()函数&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;$array&amp;nbsp;=&amp;nbsp;[1,&amp;nbsp;0,&amp;nbsp;2,&amp;nbsp;0,&amp;nbsp;3,&amp;nbsp;0];
$nonZeroArray&amp;nbsp;=&amp;nbsp;array_diff($array,&amp;nbsp;[0]);&lt;/pre&gt;&lt;p&gt;4. 使用array_values()函数重新索引数组，以去除0元素&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-php&quot;&gt;$array&amp;nbsp;=&amp;nbsp;[1,&amp;nbsp;0,&amp;nbsp;2,&amp;nbsp;0,&amp;nbsp;3,&amp;nbsp;0];
$array&amp;nbsp;=&amp;nbsp;array_values(array_filter($array,&amp;nbsp;function($value){
&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;return&amp;nbsp;$value&amp;nbsp;!==&amp;nbsp;0;
}));&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;以上这些方法可以从数组中去除所有的0元素。注意，方法1和方法4都会重新索引数组，所以如果想保持原数组的键值关系，请使用方法2或方法3。&lt;br/&gt;&lt;/p&gt;</description><pubDate>Sun, 15 Dec 2024 11:35:30 +0800</pubDate></item><item><title>MySQL 中 where in 长度过长的解决方法</title><link>https://www.htmlcms.cn/?id=10</link><description>&lt;p&gt;在使用MySQL数据库时，我们经常会使用 where in 语句来查询一组特定的值，例如：&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-sql&quot;&gt;SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;students&amp;nbsp;WHERE&amp;nbsp;id&amp;nbsp;IN&amp;nbsp;(1,&amp;nbsp;2,&amp;nbsp;3,&amp;nbsp;4,&amp;nbsp;5);&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;方法一：使用子查询&lt;br/&gt;&lt;br/&gt;我们可以将需要查询的值放在一个子查询中，然后在主查询中引用这个子查询。这样可以避免 where in 语句过长的问题，同时也可以提高查询性能。&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-sql&quot;&gt;
SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;students&amp;nbsp;WHERE&amp;nbsp;id&amp;nbsp;IN&amp;nbsp;(SELECT&amp;nbsp;id&amp;nbsp;FROM&amp;nbsp;students);&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;方法二：使用JOIN语句&lt;br/&gt;&lt;br/&gt;我们可以将需要查询的值放在一个单独的表中，然后使用JOIN语句将其与主查询表连接起来。这样可以避免 where in 语句过长的问题，同时也可以提高查询性能。&lt;br/&gt;&lt;br/&gt;&lt;/p&gt;&lt;pre class=&quot;prism-highlight prism-language-sql&quot;&gt;CREATE&amp;nbsp;TABLE&amp;nbsp;temp_ids&amp;nbsp;(id&amp;nbsp;INT);
INSERT&amp;nbsp;INTO&amp;nbsp;temp_ids&amp;nbsp;VALUES&amp;nbsp;(1),&amp;nbsp;(2),&amp;nbsp;(3),&amp;nbsp;(4),&amp;nbsp;(5);
SELECT&amp;nbsp;*&amp;nbsp;FROM&amp;nbsp;students&amp;nbsp;s&amp;nbsp;JOIN&amp;nbsp;temp_ids&amp;nbsp;t&amp;nbsp;ON&amp;nbsp;s.id&amp;nbsp;=&amp;nbsp;t.id;&lt;/pre&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Mon, 07 Oct 2024 10:05:50 +0800</pubDate></item><item><title>ThinkPHP 使用withJoin时，field无效的解决办法</title><link>https://www.htmlcms.cn/?id=9</link><description>&lt;p&gt;ThinkPHP 使用withJoin时，field无效的解决办法：&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;&lt;p&gt;一、 filed 改为使用 visible.&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1. 需注意，visible里需要传的是数组，且主表的字段不需要加别名（where条件仍然需要加别名）。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2. 主表解释：表A withJoin 表B，则表A是主表。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;3. 别名解释，withJoin 会自动设置别名，例：模型 UserData 的别名为 user_data。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;4. &lt;span style=&quot;color: #FF0000;&quot;&gt;特别说明：由于withJoin 会自动设置别名，所以withJoin不支持alias方法指定别名。&lt;/span&gt;&lt;/p&gt;&lt;p&gt;二、 withJoin 改为 普通关联模式。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;1. 更改方法：withJoin 改为 join/leftjoin/rightjoin/fulljoin(&amp;#39;表B 表B别名&amp;#39;,&amp;#39;表A别名.字段=表B别名.字段&amp;#39;)，其中join/leftjoin/rightjoin/fulljoin根据需求自行选择其一。&lt;/p&gt;&lt;p&gt;&amp;nbsp;&amp;nbsp;&amp;nbsp;&amp;nbsp;2. 注意表A加上别名，方便书写。&lt;/p&gt;&lt;p&gt;&lt;br/&gt;&lt;/p&gt;</description><pubDate>Fri, 16 Aug 2024 10:15:10 +0800</pubDate></item></channel></rss>