{"id":264993,"date":"2015-09-05T00:19:02","date_gmt":"2015-09-04T20:19:02","guid":{"rendered":"http:\/\/savepearlharbor.com\/?p=264993"},"modified":"-0001-11-30T00:00:00","modified_gmt":"-0001-11-29T21:00:00","slug":"","status":"publish","type":"post","link":"https:\/\/savepearlharbor.com\/?p=264993","title":{"rendered":"\u041d\u0430\u0431\u043e\u0440 Yii2 Behavior \u0434\u043b\u044f \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u0434\u0435\u0440\u0435\u0432\u044c\u0435\u0432 \u0432 \u0411\u0414 \u0438 \u0438\u0445 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f"},"content":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/75a\/72c\/ecf\/75a72cecf9a64c7d83eb20892d5c00ae.jpg\" align=\"left\"\/><br \/>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<br \/>  \u0412 \u043e\u0434\u043d\u043e\u043c \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 Yii2 \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c Adjacency List \u0438 Nested Sets. \u041f\u0440\u0438\u0447\u0451\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f Nested Sets, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d. \u0417\u0430\u0442\u0435\u043c \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e Nested Sets \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0442. \u043a. \u0432 \u0431\u0430\u0437\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c Materialized Path. \u0418\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 GitHub Behavior (<a href=\"https:\/\/github.com\/matperez\/yii2-materialized-path\">matperez\/yii2-materialized-path<\/a>) \u0431\u044b\u043b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439, \u0430 \u0442\u0430\u043a \u043a\u0430\u043a <a href=\"http:\/\/habrahabr.ru\/post\/263447\/\">\u044f \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b<\/a> \u0441\u0432\u043e\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u043b\u044f <a href=\"https:\/\/github.com\/paulzi\/yii2-adjacency-list\">Adjacency List<\/a> \u0438 <a href=\"https:\/\/github.com\/paulzi\/yii2-nested-intervals\">Nested Intervals<\/a>, \u044f \u0440\u0435\u0448\u0438\u043b, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0441 \u0435\u0434\u0438\u043d\u044b\u043c API, \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0445 \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0436\u0434\u043e\u0433\u043e.<br \/>  <br clear=\"all\"\/>  <a name=\"habracut\"><\/a><\/p>\n<h2>\u0421\u043f\u0438\u0441\u043e\u043a \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439<\/h2>\n<p>  <\/p>\n<h3>Adjacency List<\/h3>\n<p>  + \u0441\u0430\u043c\u043e\u043f\u043e\u0434\u0434\u0435\u0440\u0436\u0438\u0432\u0430\u044e\u0449\u0430\u044f \u0446\u0435\u043b\u043e\u0441\u0442\u043d\u043e\u0441\u0442\u044c \u0441\u0442\u0440\u0443\u043a\u0442\u0443\u0440\u0430<br \/>  + \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438, \u0442. \u043a. \u043d\u0435 \u0442\u0440\u0435\u0431\u0443\u0435\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u0435\u0440\u0435\u0441\u0447\u0451\u0442\u043e\u0432 \u0438 \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0439 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432<br \/>  + \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u044f \u0438 \u0434\u0435\u0442\u0435\u0439<br \/>   \u2014 \u0441\u043b\u043e\u0436\u043d\u043e\u0441\u0442\u044c \u0438 \u043c\u0435\u0434\u043b\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u044c \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u043a\u043e\u0432 \u0438 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432<\/p>\n<p>  \u0421\u0430\u043c\u044b\u0439 \u043f\u0440\u043e\u0441\u0442\u043e\u0439 \u0432\u0438\u0434 \u0441\u0432\u044f\u0437\u0438, \u0447\u0430\u0449\u0435 \u0432\u0441\u0435\u0433\u043e \u0434\u043b\u044f \u0435\u0433\u043e \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u0438 \u043d\u0435 \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u044e\u0442 \u043d\u0438\u043a\u0430\u043a\u0438\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u0430 \u043f\u0440\u043e\u0441\u0442\u043e \u043f\u0440\u043e\u043f\u0438\u0441\u044b\u0432\u0430\u044e\u0442 \u0441\u0432\u044f\u0437\u0438 \u0441 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u043c \u0438 \u0434\u0435\u0442\u044c\u043c\u0438. \u041d\u043e \u0441\u0442\u043e\u0438\u0442 \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u044c Adjacency List \u043f\u043e\u043b\u0435\u043c \u0441\u043e\u0440\u0442\u0438\u0440\u043e\u0432\u043a\u0438 \u0434\u043b\u044f \u0443\u0437\u043b\u043e\u0432 (<code>insertBefore()<\/code>\/<code>insertAfter()<\/code>), \u0442\u043e \u0442\u0443\u0442 \u0443\u0436\u0435 \u0431\u0435\u0437 \u0433\u043e\u0442\u043e\u0432\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0441\u0442\u0430\u043d\u043e\u0432\u0438\u0442\u0441\u044f \u0441\u043b\u043e\u0436\u043d\u043e. \u0414\u0430 \u0438 \u043f\u043e\u043b\u0443\u0447\u0438\u0442\u044c \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u043a\u043e\u0432\/\u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \u043e\u0434\u043d\u0438\u043c\u0438 \u0441\u0432\u044f\u0437\u044f\u043c\u0438 \u0441\u043b\u043e\u0436\u043d\u043e\u0432\u0430\u0442\u043e \u0443\u0436\u0435.<br \/>  \u0412\u0441\u0435 \u044d\u0442\u0438 \u043f\u0440\u043e\u0431\u043b\u0435\u043c\u044b \u0440\u0435\u0448\u0430\u0435\u0442 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0435. \u041a\u0440\u043e\u043c\u0435 \u0442\u043e\u0433\u043e, \u0443 \u043d\u0435\u0433\u043e \u0435\u0441\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0444\u0438\u0448\u043a\u0438 \u2014 \u043e\u043d \u043f\u043e\u0437\u0432\u043e\u043b\u044f\u0435\u0442 \u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0441\u0442\u0440\u0430\u0438\u0432\u0430\u0435\u043c\u043e\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e join-\u043e\u0432 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0441\u0430\u043c\u0443 \u0441 \u0441\u043e\u0431\u043e\u0439 \u0434\u043b\u044f \u0441\u043e\u043a\u0440\u0430\u0449\u0435\u043d\u0438\u044f \u0438 \u0443\u0441\u043a\u043e\u0440\u0435\u043d\u0438\u044f \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u043d\u0430 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043f\u0440\u0435\u0434\u043a\u043e\u0432\/\u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432.<br \/>  <a href=\"https:\/\/github.com\/paulzi\/yii2-adjacency-list\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 GitHub<\/a><\/p>\n<h3>Materialized Path<\/h3>\n<p>  \u041c\u0435\u0442\u043e\u0434\u0438\u043a\u0430 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u044f \u043f\u043e\u043b\u043d\u043e\u0433\u043e \u043f\u0443\u0442\u0438 \u0432 \u043a\u0430\u0436\u0434\u043e\u043c \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0435 (\u043f\u0440\u044f\u043c\u043e \u043a\u0430\u043a \u043f\u0443\u0442\u044c \u0432 \u0444\u0430\u0439\u043b\u043e\u0432\u043e\u0439 \u0441\u0438\u0441\u0442\u0435\u043c\u0435).<br \/>  + \u0431\u044b\u0441\u0442\u0440\u043e\u0435 \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u0440\u0435\u0434\u043a\u043e\u0432 \u0438 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432<br \/>  + \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043d\u043e\u0432\u044b\u0445 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u043e\u0432<br \/>   \u2014 \u043d\u0435\u043e\u043f\u0442\u0438\u043c\u0430\u043b\u044c\u043d\u043e\u0435 \u0445\u0440\u0430\u043d\u0435\u043d\u0438\u0435 \u043f\u0443\u0442\u0438, \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u044b\u0435 \u043e\u0433\u0440\u0430\u043d\u0438\u0447\u0435\u043d\u0438\u044f \u043d\u0430 \u0435\u0433\u043e \u0434\u043b\u0438\u043d\u0443<br \/>   \u2014 \u0432 \u043e\u0431\u0449\u0435\u043c \u0432\u0438\u0434\u0435 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e \u0434\u043e\u043f\u043e\u043b\u043d\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0435 \u043f\u043e\u043b\u0435 depth \u0434\u043b\u044f \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u044f \u043d\u0435\u043f\u043e\u0441\u0440\u0435\u0434\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0445 \u0434\u0435\u0442\u0435\u0439 (\u0432 \u0440\u0435\u0430\u043b\u0438\u0437\u0430\u0446\u0438\u044f\u0445 \u043f\u043e\u0434 \u043a\u043e\u043d\u043a\u0440\u0435\u0442\u043d\u0443\u044e \u0431\u0430\u0437\u0443 \u044d\u0442\u043e \u0442\u0440\u0435\u0431\u043e\u0432\u0430\u043d\u0438\u0435 \u043d\u0435 \u043d\u0443\u0436\u043d\u043e)<br \/>   \u2014 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 \u043f\u0443\u0442\u0438 \u0443 \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430, \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0432\u0441\u0435\u0445 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432<\/p>\n<p>  \u0427\u0435\u043c \u0436\u0435 \u043c\u043d\u0435 \u043d\u0435 \u043f\u043e\u0434\u043e\u0448\u0451\u043b <a href=\"https:\/\/github.com\/matperez\/yii2-materialized-path\">matperez\/yii2-materialized-path<\/a>, \u043f\u043e\u043c\u0438\u043c\u043e \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0435\u0434\u0438\u043d\u043e\u0433\u043e API \u0438 \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0438\u044f \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u044b\u0445 \u043c\u0435\u0442\u043e\u0434\u043e\u0432? \u0412 \u043f\u0435\u0440\u0432\u0443\u044e \u043e\u0447\u0435\u0440\u0435\u0434\u044c \u0442\u0435\u043c, \u0447\u0442\u043e \u043e\u0431\u043d\u043e\u0432\u043b\u0435\u043d\u0438\u0435 \u0434\u0435\u0442\u0435\u0439 \u043f\u0440\u0438 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u0438\u0438 path \u0443 \u043d\u0435\u0433\u043e \u0438\u0434\u0451\u0442 php-\u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0435\u0439, \u0447\u0442\u043e \u043f\u043e\u0440\u043e\u0436\u0434\u0430\u0435\u0442 \u0442\u0443\u0447\u0443 \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u0432 \u0432 \u0431\u0430\u0437\u0443, \u0447\u0442\u043e \u043e\u0447\u0435\u043d\u044c \u043f\u043b\u043e\u0445\u043e. \u0412 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u043d\u043e\u043c \u043c\u043d\u043e\u044e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0438 \u044d\u0442\u043e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0441\u044f \u043e\u0434\u043d\u0438\u043c \u0437\u0430\u043f\u0440\u043e\u0441\u043e\u043c, \u043f\u0440\u0430\u0432\u0434\u0430 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043f\u043e\u0436\u0435\u0440\u0442\u0432\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u043a\u043e\u0442\u043e\u0440\u043e\u0439 \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u043c\u043e\u0441\u0442\u044c\u044e \u0441 \u0431\u0430\u0437\u0430\u043c\u0438 \u0434\u0430\u043d\u043d\u044b\u0445 \u2014 \u0442\u0440\u0435\u0431\u0443\u0435\u0442\u0441\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0430 \u0444\u0443\u043d\u043a\u0446\u0438\u0439 <code>CONCAT()<\/code> \u0438 <code>LENGTH()<\/code> (\u0432 \u0431\u043e\u043b\u044c\u0448\u0438\u043d\u0441\u0442\u0432\u0435 \u0411\u0414 \u043e\u043d\u0438 \u0435\u0441\u0442\u044c \u2014 mysql, pqsql, mssql). \u0415\u0449\u0451 \u0438\u0437 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432 \u2014 \u0432 \u043c\u043e\u0451\u043c behavior \u043f\u0440\u0435\u0434\u0443\u0441\u043c\u043e\u0442\u0440\u0435\u043d\u043e \u0434\u0432\u0430 \u0440\u0435\u0436\u0438\u043c\u0430 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u044f \u043f\u0443\u0442\u0438 \u2014 \u043f\u043e \u043f\u0435\u0440\u0432\u0438\u0447\u043d\u043e\u043c\u0443 \u043a\u043b\u044e\u0447\u0443 \u0438\u043b\u0438 \u043f\u043e \u0434\u0440\u0443\u0433\u043e\u043c\u0443 \u043f\u043e\u043b\u044e, \u043f\u0440\u0438\u0447\u0451\u043c \u043d\u0435 \u043e\u0431\u044f\u0437\u0430\u0442\u0435\u043b\u044c\u043d\u043e \u0443\u043d\u0438\u043a\u0430\u043b\u044c\u043d\u043e\u043c\u0443.<br \/>  <a href=\"https:\/\/github.com\/paulzi\/yii2-materialized-path\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 GitHub<\/a><\/p>\n<h3>Nested Sets<\/h3>\n<p>  + \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0435\u0434\u043a\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432, \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0438 \u043f\u0443\u0441\u0442\u044b\u0445 \u0443\u0437\u043b\u043e\u0432<br \/>  + \u043c\u043e\u043c\u0435\u043d\u0442\u0430\u043b\u044c\u043d\u043e \u043f\u043e\u043b\u0443\u0447\u0435\u043d\u0438\u0435 \u043a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u0430 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 \u0432 \u0443\u0437\u043b\u0435<br \/>  + \u043d\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u0430<br \/>   \u2014 \u043e\u0447\u0435\u043d\u044c \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435 \u043c\u043e\u0434\u0438\u0444\u0438\u043a\u0430\u0446\u0438\u0438 \u0434\u0435\u0440\u0435\u0432\u0430, \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 \u0431\u043e\u043b\u044c\u0448\u0438\u0445 \u0431\u0430\u0437 (\u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043e\u0434\u043d\u043e\u0433\u043e \u044d\u043b\u0435\u043c\u0435\u043d\u0442\u0430 \u043c\u043e\u0436\u0435\u0442 \u0437\u0430\u043f\u0440\u043e\u0441\u0442\u043e \u0434\u043b\u0438\u0442\u044c\u0441\u044f \u0431\u043e\u043b\u0435\u0435 30 \u0441\u0435\u043a\u0443\u043d\u0434 \u0432 \u0431\u043e\u043b\u044c\u0448\u043e\u0439 \u0431\u0430\u0437\u0435)<\/p>\n<p>  \u0414\u043b\u044f Yii2 \u0443\u0436\u0435 \u0435\u0441\u0442\u044c <a href=\"https:\/\/github.com\/creocoder\/yii2-nested-sets\">\u043e\u0442\u043b\u0438\u0447\u043d\u043e\u0435 \u0440\u0430\u0441\u0448\u0438\u0440\u0435\u043d\u0438\u0435 \u043e\u0442 Creocoder<\/a>, \u043d\u043e \u043c\u043d\u0435 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u0435\u0433\u043e \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u0430\u0442\u044c \u0434\u043b\u044f \u043f\u043e\u0434\u0434\u0435\u0440\u0436\u043a\u0438 \u0435\u0434\u0438\u043d\u043e\u0433\u043e API, \u043e \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u0447\u0443\u0442\u044c \u043d\u0438\u0436\u0435. \u042d\u0442\u043e\u0442 API \u0434\u0430\u0451\u0442 \u0440\u044f\u0434 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432.<br \/>  <a href=\"https:\/\/github.com\/paulzi\/yii2-nested-sets\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 GitHub<\/a><\/p>\n<h3>Nested Intervals<\/h3>\n<p>  + \u0431\u044b\u0441\u0442\u0440\u044b\u0435 \u0432\u044b\u0431\u043e\u0440\u043a\u0438 \u043f\u0440\u0435\u0434\u043a\u043e\u0432, \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432<br \/>  + \u043d\u0435 \u0440\u0435\u043a\u0443\u0440\u0441\u0438\u0432\u043d\u043e\u0435 \u043f\u043e\u0441\u0442\u0440\u043e\u0435\u043d\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u0430<br \/>  + \u0431\u044b\u0441\u0442\u0440\u0430\u044f \u0432\u0441\u0442\u0430\u0432\u043a\u0430 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u043e\u043f\u0442\u0438\u043c\u0438\u0437\u0430\u0446\u0438\u0438 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432<br \/>   \u2014 \u043c\u0435\u0434\u043b\u0435\u043d\u043d\u044b\u0435 \u043f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u044f \u0443\u0437\u043b\u043e\u0432<\/p>\n<p>  \u042d\u0442\u043e\u0442 \u0430\u043b\u0433\u043e\u0440\u0438\u0442\u043c \u043d\u0435 \u043e\u0447\u0435\u043d\u044c \u043f\u043e\u043f\u0443\u043b\u044f\u0440\u0435\u043d, \u0445\u043e\u0442\u044f \u043e\u043d \u043e\u0447\u0435\u043d\u044c \u0431\u044b\u0441\u0442\u0440 \u043f\u0440\u0438 \u0443\u0441\u043b\u043e\u0432\u0438\u0438 \u0432\u044b\u0431\u043e\u0440\u0430 \u043f\u0440\u0430\u0432\u0438\u043b\u044c\u043d\u044b\u0445 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u043e\u0432. \u0411\u043e\u043b\u0435\u0435 \u043f\u043e\u0434\u0440\u043e\u0431\u043d\u043e \u043e nested intervals \u043c\u043e\u0436\u043d\u043e \u043f\u043e\u0447\u0438\u0442\u0430\u0442\u044c \u0432 <a href=\"http:\/\/habrahabr.ru\/post\/263447\/\">\u044d\u0442\u043e\u0439 \u0441\u0442\u0430\u0442\u044c\u0435<\/a>.<br \/>  <a href=\"https:\/\/github.com\/paulzi\/yii2-nested-sets\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 GitHub<\/a><\/p>\n<h2>\u0415\u0434\u0438\u043d\u043e\u0435 API<\/h2>\n<p>  \u0412\u0441\u0435 \u043f\u0435\u0440\u0435\u0447\u0438\u0441\u043b\u0435\u043d\u043d\u044b\u0435 \u0432\u044b\u0448\u0435 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0438\u043c\u0435\u044e\u0442 \u043e\u0431\u0449\u0435\u0435 API, \u0431\u043b\u0430\u0433\u043e\u0434\u0430\u0440\u044f \u0447\u0435\u043c\u0443 \u043c\u043e\u0433\u0443\u0442 \u0431\u044b\u0442\u044c \u0437\u0430\u043c\u0435\u043d\u0435\u043d\u044b \u0431\u0435\u0437 \u043f\u0435\u0440\u0435\u043f\u0438\u0441\u044b\u0432\u0430\u043d\u0438\u044f \u043a\u043e\u0434\u0430.<br \/>  \u0423 API \u0435\u0441\u0442\u044c \u043e\u0434\u043d\u043e \u0431\u043e\u043b\u044c\u0448\u043e\u0435 \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u2014 \u0434\u0432\u043e\u0439\u0441\u0442\u0432\u0435\u043d\u043d\u044b\u0439 \u0434\u043e\u0441\u0442\u0443\u043f \u043a \u0441\u0432\u044f\u0437\u0430\u043d\u043d\u044b\u043c \u043e\u0431\u044a\u0435\u043a\u0442\u0430\u043c \u0447\u0435\u0440\u0435\u0437 \u0441\u0442\u0430\u043d\u0434\u0430\u0440\u0442\u043d\u044b\u0439 \u0434\u043b\u044f Yii2 \u043c\u0435\u0445\u0430\u043d\u0438\u0437\u043c Relations:  <\/p>\n<pre><code class=\"php\">$parent = $model-&gt;getParent()-&gt;orderBy(['title' =&gt; SORT_DESC])-&gt;one(); \/\/ \u0435\u0441\u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u0432\u044f\u0437\u044c \u043c\u0435\u0442\u043e\u0434\u043e\u043c, \u0432\u0435\u0440\u043d\u0451\u0442 ActiveQuery $title1 = $model-&gt;parent-&gt;title; \/\/ \u0435\u0441\u043b\u0438 \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u0441\u0432\u043e\u0439\u0441\u0442\u0432\u043e\u043c, \u0432\u0435\u0440\u043d\u0451\u0442 \u0441\u0430\u043c \u043e\u0431\u044a\u0435\u043a\u0442 $title2 = $model-&gt;parent-&gt;title . ' (2)'; \/\/ \u043f\u043e\u0432\u0442\u043e\u0440\u043d\u044b\u0439 \u0432\u044b\u0437\u043e\u0432 \u041d\u0415 \u0433\u0435\u043d\u0435\u0440\u0438\u0440\u0443\u0435\u0442 \u0432\u0442\u043e\u0440\u043e\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 \u043a \u0431\u0430\u0437\u0435 <\/code><\/pre>\n<p>  \u0415\u0441\u0442\u044c \u0438 \u043e\u0441\u043e\u0431\u0435\u043d\u043d\u043e\u0441\u0442\u044c \u2014 \u043c\u0435\u0442\u043e\u0434\u044b <code>makeRoot(), prependTo(), appendTo(), insertBefore(), insertAfter()<\/code> \u2014 \u043d\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u044f\u0442 \u0441\u0430\u043c\u043e \u0434\u0435\u0439\u0441\u0442\u0432\u0438\u0435, \u0430 \u043b\u0438\u0448\u044c \u0434\u0430\u044e\u0442 \u0443\u043a\u0430\u0437\u0430\u043d\u0438\u0435 \u043d\u0430 \u0435\u0433\u043e \u0442\u0438\u043f, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u043e\u0441\u043b\u0435 \u043d\u0438\u0445 \u043d\u0430\u0434\u043e \u043d\u0435 \u0437\u0430\u0431\u044b\u0442\u044c \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u044c <code>save()<\/code>:  <\/p>\n<pre><code class=\"php\">$node = new Node; $node-&gt;title = 'root'; $node-&gt;makeRoot()-&gt;save(); <\/code><\/pre>\n<p>  \u042d\u0442\u043e \u0441\u0434\u0435\u043b\u0430\u043d\u043e \u0434\u043b\u044f \u0442\u043e\u0433\u043e, \u0447\u0442\u043e\u0431\u044b \u043d\u0435 \u043f\u0440\u043e\u0442\u0430\u0441\u043a\u0438\u0432\u0430\u0442\u044c \u0437\u0430 \u0441\u043e\u0431\u043e\u0439 \u043f\u0430\u0440\u0430\u043c\u0435\u0442\u0440\u044b <code>save($runValidation = true, $attributeNames = null)<\/code>.<\/p>\n<h2>Trait \u0434\u043b\u044f \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e\u0433\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u043d\u0438\u044f \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u0438\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439<\/h2>\n<p>  Behavior \u0432 Yii2 \u0440\u0435\u0430\u043b\u0438\u0437\u043e\u0432\u0430\u043d\u044b \u0442\u0430\u043a\u0438\u043c \u043e\u0431\u0440\u0430\u0437\u043e\u043c, \u0447\u0442\u043e \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442\u0441\u044f \u043c\u0435\u0442\u043e\u0434 \u043f\u0435\u0440\u0432\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0432 \u043a\u043e\u0442\u043e\u0440\u043e\u043c \u043e\u043d \u0441\u0443\u0449\u0435\u0441\u0442\u0432\u0443\u0435\u0442. \u0427\u0442\u043e\u0431\u044b \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u043d\u043e \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c \u043d\u0435\u0441\u043a\u043e\u043b\u044c\u043a\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439, \u043d\u0430\u0434\u043e \u0432\u044b\u0437\u0432\u0430\u0442\u044c \u043c\u043e\u0434\u0438\u0444\u0438\u0446\u0438\u0440\u0443\u044e\u0449\u0438\u0435 \u0434\u0435\u0440\u0435\u0432\u043e \u043c\u0435\u0442\u043e\u0434\u044b \u0434\u043b\u044f \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0435\u043d\u043d\u043e\u0433\u043e \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f, \u0430 \u0434\u043b\u044f \u0432\u044b\u0431\u0438\u0440\u0430\u044e\u0449\u0438\u0445 \u0438\u0437 \u0431\u0430\u0437\u044b \u043c\u0435\u0442\u043e\u0434\u043e\u0432 \u2014 \u043d\u0430\u0438\u0431\u043e\u043b\u0435\u0435 \u0431\u044b\u0441\u0442\u0440\u044b\u0439. \u0414\u043b\u044f \u044d\u0442\u043e\u0433\u043e \u0431\u044b\u043b \u043d\u0430\u043f\u0438\u0441\u0430\u043d Trait, \u043a\u043e\u0442\u043e\u0440\u044b\u0439 \u0432\u044b\u043f\u043e\u043b\u043d\u044f\u0435\u0442 \u044d\u0442\u0438 \u0444\u0443\u043d\u043a\u0446\u0438\u0438. \u0417\u0430\u043e\u0434\u043d\u043e \u044d\u0442\u043e \u0438\u0437\u0431\u0430\u0432\u043b\u044f\u0435\u0442 \u043e\u0442 \u043d\u0435\u043e\u0431\u0445\u043e\u0434\u0438\u043c\u043e\u0441\u0442\u0438 \u0443\u043a\u0430\u0437\u044b\u0432\u0430\u0442\u044c PhpDoc \u043a\u0430\u0436\u0434\u044b\u0439 \u0440\u0430\u0437.<br \/>  <a href=\"https:\/\/github.com\/paulzi\/yii2-auto-tree\">\u0421\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u043d\u0430 GitHub<\/a><\/p>\n<p>  \u041f\u0440\u0438\u043c\u0435\u0440:  <\/p>\n<pre><code class=\"php\">use paulzi\\adjacencylist\\AdjacencyListBehavior; use paulzi\\nestedsets\\NestedSetsBehavior; use paulzi\\autotree\\AutoTreeTrait;  class Node extends \\yii\\db\\ActiveRecord {     use AutoTreeTrait;          public function behaviors() {         return [             ['class' =&gt; AdjacencyListBehavior::className()],             ['class' =&gt; NestedSetsBehavior::className()],         ];     } } <\/code><\/pre>\n<p>  \u0422\u0435\u043f\u0435\u0440\u044c:  <\/p>\n<pre><code class=\"php\">$node-&gt;parents;     \/\/ \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c nested sets $node-&gt;parent;      \/\/ \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c adjacency list $node-&gt;children;    \/\/ \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c adjacency list $node-&gt;descendants; \/\/ \u0431\u0443\u0434\u0435\u0442 \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u043e\u0432\u0430\u0442\u044c nested sets $node-&gt;insertAfter($node2)-&gt;save() \/\/ \u0432\u044b\u043f\u043e\u043b\u043d\u0438\u0442\u0441\u044f \u0434\u043b\u044f \u0434\u0432\u0443\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0441\u0440\u0430\u0437\u0443 <\/code><\/pre>\n<p>  \u041c\u0430\u043a\u0441\u0438\u043c\u0430\u043b\u044c\u043d\u043e \u044d\u0444\u0444\u0435\u043a\u0442\u0438\u0432\u043d\u044b\u0435 \u0441\u043e\u0447\u0435\u0442\u0430\u043d\u0438\u044f:<br \/>  Adjacency List + Materialized Path<br \/>  Adjacency List + Nested Sets<br \/>  Adjacency List + Nested Intervals<\/p>\n<h2>\u0421\u0440\u0430\u0432\u0435\u043d\u0438\u0435 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/h2>\n<p>  \u0418\u0437 \u0442\u0430\u0431\u043b\u0438\u0446\u044b \u0434\u0443\u043c\u0430\u044e \u0432\u0438\u0434\u043d\u043e, \u0432 \u0447\u0451\u043c \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u0430 \u0438 \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043a\u0438 \u043a\u0430\u0436\u0434\u043e\u0433\u043e \u0438\u0437 behavior:  <\/p>\n<div class=\"spoiler\"><b class=\"spoiler_title\">\u0422\u0430\u0431\u043b\u0438\u0446\u0430 \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u0434\u0438\u0442\u0435\u043b\u044c\u043d\u043e\u0441\u0442\u0438<\/b><\/p>\n<div class=\"spoiler_text\">\n<pre>                                                 \u0417\u0430\u043f\u0440\u043e\u0441\u043e\u0432    DB \u0432\u0440\u0435\u043c\u044f    \u0412\u044b\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435  \u041f\u0430\u043c\u044f\u0442\u044c  \u0422\u0435\u0441\u0442 1. \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 3 \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u043e 12 \u0434\u0435\u0442\u0435\u0439     Adjacency List                              5811        1,567 ms    9,591 ms    71.3 MB     Nested Sets                                 7697        6,672 ms    25,019 ms   105.9 MB     Nested Intervals amount=24                  5813        1,765 ms    10,442 ms   78.7 MB     Nested Intervals amount=12 noPrepend noIns. 5813        1,750 ms    10,223 ms   78.7 MB     Materialized Path (identity pr. key mode)   7696        3,169 ms    13,726 ms   92.5 MB     Materialized Path (attribute mode)          5811        1,690 ms    9,504 ms    71.6 MB  \u0422\u0435\u0441\u0442 2. \u0417\u0430\u043f\u043e\u043b\u043d\u0435\u043d\u0438\u0435 6 \u0443\u0440\u043e\u0432\u043d\u044f \u043f\u043e 3 \u0434\u0435\u0442\u0435\u0439     Adjacency List                              3642        982 ms      5,812 ms    44.5 MB     Nested Sets                                 4736        5,447 ms    17,859 ms   65.0 MB     Nested Intervals amount=10                  3644        1,275 ms    5,976 ms    48.9 MB     Nested Intervals amount=3 noPrepend noIns.  3644        1,271 ms    5,993 ms    48.9 MB     Materialized Path (identity pr. key mode)   4735        1,316 ms    6,920 ms    57.3 MB     Materialized Path (attribute mode)          3642        1,129 ms    5,507 ms    44.6 MB  \u0422\u0435\u0441\u0442 3. \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e &lt;4% (20 \u0432 19657 \u0443\u0437\u043b\u043e\u0432)     Adjacency List                              100         36 ms       190 ms      4.6 MB     PaulZi                                      100         15,768 ms   16,712 ms   4.7 MB     Nested Intervals                            82          21 ms       150 ms      4.7 MB     Materialized Path (identity pr. key mode)   120         98 ms       355 ms      4.8 MB     Materialized Path (attribute mode)          100         74 ms       334 ms      4.6 MB  \u0422\u0435\u0441\u0442 4. \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0443 &gt;46% &lt;50% (20 \u0432 19657 \u0443\u0437\u043b\u043e\u0432)     Adjacency List                              100         24 ms       150 ms      4.6 MB     Nested Sets                                 100         8,212 ms    8,799 ms    4.7 MB     Nested Intervals                            82          269 ms      593 ms      4.7 MB     Materialized Path (identity pr. key mode)   120         35 ms       196 ms      4.9 MB     Materialized Path (attribute mode)          100         287 ms      494 ms      4.6 MB  \u0422\u0435\u0441\u0442 5. \u0412\u0441\u0442\u0430\u0432\u043a\u0430 \u0432 \u043a\u043e\u043d\u0435\u0446 &gt;96% (20 \u0432 19657 \u0443\u0437\u043b\u043e\u0432)     Adjacency List                              100         31 ms       214 ms      4.5 MB     Nested Sets                                 100         487 ms      899 ms      4.7 MB     Nested Intervals                            83          46 ms       187 ms      4.7 MB     Materialized Path (identity pr. key mode)   120         34 ms       229 ms      4.8 MB     Materialized Path (attribute mode)          100         470 ms      718 ms      4.6 MB  \u0422\u0435\u0441\u0442 6. \u0423\u0434\u0430\u043b\u0435\u043d\u0438\u0435 \u0438\u0437 \u043d\u0430\u0447\u0430\u043b\u0430 &lt;4% (20 \u0438\u0437 19657 \u0443\u0437\u043b\u043e\u0432)     Adjacency List parentJoin=0 childrenJoin=0  60          169 ms      257 ms      3.8 MB     Adjacency List parentJoin=3 childrenJoin=3  60          87 ms       162 ms      3.8 MB     Nested Sets                                 100         16,480 ms   16,902 ms   4.7 MB     Nested Intervals                            60          164 ms      250 ms      4.2 MB     Materialized Path (identity pr. key mode)   60          87 ms       201 ms      4.0 MB     Materialized Path (attribute mode)          60          122 ms      219 ms      4.0 MB  \u0422\u0435\u0441\u0442 7. appendTo() \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0443\u0437\u0435\u043b (5 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, 1000 \u0443\u0437\u043b\u043e\u0432)     Adjacency List                              4001        1,062 ms    5,976 ms    46.1 MB     Nested Sets                                 5003        5,428 ms    17,334 ms   64.8 MB     Nested Intervals amount=10                  8497        23,301 ms   41,060 ms   120.7 MB     Nested Intervals x64 amount=10              7092        11,330 ms   23,618 ms   97.5 MB     Nested Intervals amount=200,25 noPrep noIns 4009        1,431 ms    6,490 ms    50.2 MB     Nested Intervals x64 a=250,30 noPrep noIns  4003        1,421 ms    6,615 ms    50.0 MB     Materialized Path (identity pr. key mode)   5003        1,621 ms    8,184 ms    57.8 MB     Materialized Path (attribute mode)          4002        1,269 ms    6,169 ms    46.2 MB      \u0422\u0435\u0441\u0442 8. \u041f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u0430\u044f \u043e\u043f\u0435\u0440\u0430\u0446\u0438\u044f \u0432 \u0441\u043b\u0443\u0447\u0430\u0439\u043d\u044b\u0439 \u0443\u0437\u0435\u043b (5 \u0443\u0440\u043e\u0432\u043d\u0435\u0439, 1000 \u0443\u0437\u043b\u043e\u0432)     Adjacency List                              4383        1,330 ms    6,147 ms    53.0 MB     Nested Sets                                 5003        9,577 ms    24,334 ms   64.8 MB     Nested Intervals amount=10                  7733        8,123 ms    24,031 ms   107.2 MB     Nested Intervals x64 default amount=10      5663        3,761 ms    14,084 ms   75.6 MB     Nested Intervals amount=200,25              4175        1,548 ms    7,223 ms    52.8 MB     Nested Intervals x64 a=250,30 reserve=2     4003        1,541 ms    6,753 ms    50.0 MB     Materialized Path (identity pr. key mode)   5392        3,211 ms    11,771 ms   65.0 MB     Materialized Path (attribute mode)          4377        2,902 ms    10,132 ms   53.2 MB      \u0422\u0435\u0441\u0442 9. \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432 \u0432 \u043d\u0430\u0447\u0430\u043b\u0435 &lt;4% (20 \u0438\u0437 19657 \u0443\u0437\u043b\u043e\u0432)     Adjacency List                              112         39 ms       261 ms      4.5 MB     Nested Sets                                 140         218 ms      566 ms      5.5 MB     Nested Intervals                            160         180 ms      573 ms      6.0 MB     Materialized Path (identity pr. key mode)   128         38 ms       307 ms      4.9 MB     Materialized Path (attribute mode)          128         159 ms      495 ms      4.9 MB  \u0422\u0435\u0441\u0442 10. \u041f\u0435\u0440\u0435\u043c\u0435\u0449\u0435\u043d\u0438\u0435 \u0443\u0437\u043b\u043e\u0432 \u0438\u0437 \u043a\u043e\u043d\u0446\u0430 \u0432 \u043d\u0430\u0447\u0430\u043b\u043e &lt;4% &gt;96% (20 \u0438\u0437 19657 \u0443\u0437\u043b\u043e\u0432)     Nested Sets                                 140         16,991 ms   17,845 ms   5.5 MB     Nested Intervals                            160         16,972 ms   17,854 ms   6.0 MB     Materialized Path (identity pr. key mode)   132         49 ms       319 ms      4.9 MB     Materialized Path (attribute mode)          132         205 ms      502 ms      4.9 MB     Adjacency List                              112         33 ms       217 ms      4.5 MB      \u0422\u0435\u0441\u0442 11. \u0412\u044b\u0431\u043e\u0440 \u0432\u0441\u0435\u0445 \u0443\u0437\u043b\u043e\u0432 (19657 \u0448\u0442.)     Adjacency List                              1           33 ms       890 ms      179.1 MB     Nested Sets                                 1           40 ms       1,208 ms    215.2 MB     Nested Intervals                            1           42 ms       1,247 ms    225.3 MB     Materialized Path (identity pr. key mode)   1           46 ms       1,240 ms    209.0 MB     Materialized Path (attribute mode)          1           44 ms       1,106 ms    209.0 MB      \u0422\u0435\u0441\u0442 12. \u0412\u044b\u0431\u043e\u0440 \u0434\u0435\u0442\u0435\u0439 \u0438 \u043f\u043e\u0442\u043e\u043c\u043a\u043e\u0432 (\u0434\u043b\u044f 819 \u0443\u0437\u043b\u043e\u0432 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u0437 19657 \u0443\u0437\u043b\u043e\u0432)     Adjacency List parentJoin=0 childrenJoin=0  2562        720 ms      1,969 ms    36.9 MB     Adjacency List parentJoin=3 childrenJoin=3  2461        704 ms      1,966 ms    35.3 MB     Nested Sets                                 1641        522 ms      1,585 ms    25.0 MB     Nested Intervals                            1641        579 ms      1,657 ms    25.0 MB     Materialized Path (identity pr. key mode)   1641        569 ms      1,626 ms    23.4 MB     Materialized Path (attribute mode)          1641        793 ms      6,552 ms    44.7 MB  \u0422\u0435\u0441\u0442 13. \u0412\u044b\u0431\u043e\u0440\u043a\u0430 \u0440\u043e\u0434\u0438\u0442\u0435\u043b\u0435\u0439 (\u0434\u043b\u044f 819 \u0443\u0437\u043b\u043e\u0432 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u0437 19657 \u0443\u0437\u043b\u043e\u0432)     Adjacency List parentJoin=0 childrenJoin=0  3180        948 ms      2,304 ms    51.2 MB     Adjacency List parentJoin=3 childrenJoin=3  1641        486 ms      1,495 ms    30.8 MB     Nested Sets                                 821         3,238 ms    3,979 ms    20.7 MB     Nested Intervals                            821         3,292 ms    4,147 ms    22.0 MB     Materialized Path (identity pr. key mode)   821         292 ms      902 ms      21.2 MB     Materialized Path (attribute mode)          821         582 ms      4,574 ms    24.7 MB  \u0422\u0435\u0441\u0442 14. \u0412\u044b\u0431\u043e\u0440\u043a\u0430 \u0441\u043e\u0441\u0435\u0434\u043d\u0438\u0445 \u0443\u0437\u043b\u043e\u0432 (\u0434\u043b\u044f 819 \u0443\u0437\u043b\u043e\u0432 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u0437 19657 \u0443\u0437\u043b\u043e\u0432)     Adjacency List parentJoin=0 childrenJoin=0  1641        535 ms      1,442 ms    23.7 MB     Adjacency List parentJoin=3 childrenJoin=3  1641        508 ms      1,421 ms    23.6 MB     Nested Sets                                 1641        513 ms      1,428 ms    24.5 MB     Nested Intervals                            1641        19,681 ms   21,326 ms   27.5 MB     Materialized Path (identity pr. key mode)   1641        730 ms      1,695 ms    24.3 MB     Materialized Path (attribute mode)          1641        1,892 ms    2,964 ms    24.3 MB  \u0422\u0435\u0441\u0442 15. \u0412\u044b\u0431\u043e\u0440\u043a\u0430 \u043f\u0443\u0441\u0442\u044b\u0445 \u0443\u0437\u043b\u043e\u0432 (\u0434\u043b\u044f 819 \u0443\u0437\u043b\u043e\u0432 \u0432 \u0441\u0435\u0440\u0435\u0434\u0438\u043d\u0435 \u0434\u0435\u0440\u0435\u0432\u0430 \u0438\u0437 19657 \u0443\u0437\u043b\u043e\u0432)     Adjacency List parentJoin=0 childrenJoin=0  1833        568 ms      1,743 ms    32.6 MB     Adjacency List parentJoin=3 childrenJoin=3  1732        556 ms      1,891 ms    31.3 MB     Nested Sets                                 821         305 ms      908 ms      18.4 MB     Nested Intervals                            821         10,450 ms   11,166 ms   18.8 MB     Materialized Path (identity pr. key mode)   821         7,968 ms    8,434 ms    18.5 MB     Materialized Path (attribute mode)          821         14,349 ms   19,105 ms   21.3 MB <\/pre>\n<\/div>\n<\/div>\n<p>  <\/p>\n<h2>\u0421\u0441\u044b\u043b\u043a\u0438 \u043d\u0430 GitHub<\/h2>\n<p>  <a href=\"https:\/\/github.com\/paulzi\/yii2-adjacency-list\">Adjacency List<\/a><br \/>  <a href=\"https:\/\/github.com\/paulzi\/yii2-materialized-path\">Materialized Path<\/a><br \/>  <a href=\"https:\/\/github.com\/paulzi\/yii2-nested-sets\">Nested Sets<\/a><br \/>  <a href=\"https:\/\/github.com\/paulzi\/yii2-nested-intervals\">Nested Intervals<\/a><br \/>  <a href=\"https:\/\/github.com\/paulzi\/yii2-auto-tree\">Auto Tree Trait<\/a>     \t<\/p>\n<div class=\"clear\"><\/div>\n<p> \u0441\u0441\u044b\u043b\u043a\u0430 \u043d\u0430 \u043e\u0440\u0438\u0433\u0438\u043d\u0430\u043b \u0441\u0442\u0430\u0442\u044c\u0438 <a href=\"http:\/\/habrahabr.ru\/post\/266155\/\"> http:\/\/habrahabr.ru\/post\/266155\/<\/a><\/p>\n","protected":false},"excerpt":{"rendered":"<p>     \t<img decoding=\"async\" src=\"https:\/\/habrastorage.org\/files\/75a\/72c\/ecf\/75a72cecf9a64c7d83eb20892d5c00ae.jpg\" align=\"left\"\/><br \/>  \u041f\u0440\u0438\u0432\u0435\u0442, \u0425\u0430\u0431\u0440!<br \/>  \u0412 \u043e\u0434\u043d\u043e\u043c \u0441\u0432\u043e\u0451\u043c \u043f\u0440\u043e\u0435\u043a\u0442\u0435 \u043d\u0430 Yii2 \u043c\u043d\u0435 \u0437\u0430\u0445\u043e\u0442\u0435\u043b\u043e\u0441\u044c \u0441\u043e\u0432\u043c\u0435\u0441\u0442\u0438\u0442\u044c Adjacency List \u0438 Nested Sets. \u041f\u0440\u0438\u0447\u0451\u043c \u0442\u0430\u043a, \u0447\u0442\u043e\u0431\u044b \u0432 \u0441\u043b\u0443\u0447\u0430\u0435 \u043e\u0442\u043a\u043b\u044e\u0447\u0435\u043d\u0438\u044f \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f Nested Sets, \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b \u043e\u0441\u0442\u0430\u0432\u0430\u043b\u0441\u044f \u043f\u043e\u043b\u043d\u043e\u0441\u0442\u044c\u044e \u0440\u0430\u0431\u043e\u0442\u043e\u0441\u043f\u043e\u0441\u043e\u0431\u0435\u043d. \u0417\u0430\u0442\u0435\u043c \u044f \u043f\u043e\u043d\u044f\u043b, \u0447\u0442\u043e Nested Sets \u043c\u043d\u0435 \u043d\u0435 \u043d\u0443\u0436\u0435\u043d, \u0442. \u043a. \u0432 \u0431\u0430\u0437\u0435 \u0432\u0441\u0451 \u0440\u0430\u0432\u043d\u043e \u043f\u0440\u0438\u0445\u043e\u0434\u0438\u043b\u043e\u0441\u044c \u0445\u0440\u0430\u043d\u0438\u0442\u044c \u043f\u043e\u043b\u043d\u044b\u0439 \u043f\u0443\u0442\u044c, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043d\u0430 \u0437\u0430\u043c\u0435\u043d\u0443 \u044f \u0440\u0435\u0448\u0438\u043b \u043f\u0440\u0438\u043c\u0435\u043d\u0438\u0442\u044c Materialized Path. \u0418\u043c\u0435\u044e\u0449\u0438\u0439\u0441\u044f \u043d\u0430 GitHub Behavior (<a href=\"https:\/\/github.com\/matperez\/yii2-materialized-path\">matperez\/yii2-materialized-path<\/a>) \u0431\u044b\u043b \u043d\u0435\u0434\u043e\u0441\u0442\u0430\u0442\u043e\u0447\u043d\u043e \u0444\u0443\u043d\u043a\u0446\u0438\u043e\u043d\u0430\u043b\u0435\u043d, \u043f\u043e\u044d\u0442\u043e\u043c\u0443 \u043f\u0440\u0438\u0448\u043b\u043e\u0441\u044c \u043d\u0430\u043f\u0438\u0441\u0430\u0442\u044c \u0441\u0432\u043e\u0439, \u0430 \u0442\u0430\u043a \u043a\u0430\u043a <a href=\"http:\/\/habrahabr.ru\/post\/263447\/\">\u044f \u043d\u0435\u0434\u0430\u0432\u043d\u043e \u0443\u0436\u0435 \u043f\u0438\u0441\u0430\u043b<\/a> \u0441\u0432\u043e\u0438 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u044f \u0434\u043b\u044f <a href=\"https:\/\/github.com\/paulzi\/yii2-adjacency-list\">Adjacency List<\/a> \u0438 <a href=\"https:\/\/github.com\/paulzi\/yii2-nested-intervals\">Nested Intervals<\/a>, \u044f \u0440\u0435\u0448\u0438\u043b, \u043f\u043e\u0447\u0435\u043c\u0443 \u0431\u044b \u043d\u0435 \u0441\u0434\u0435\u043b\u0430\u0442\u044c \u043d\u0430\u0431\u043e\u0440 \u0442\u0430\u043a\u0438\u0445 \u043f\u043e\u0432\u0435\u0434\u0435\u043d\u0438\u0439 \u0441 \u0435\u0434\u0438\u043d\u044b\u043c API, \u0438 \u0432\u043e\u0437\u043c\u043e\u0436\u043d\u043e\u0441\u0442\u044c\u044e \u043f\u0440\u043e\u0438\u0437\u0432\u043e\u043b\u044c\u043d\u043e \u043f\u043e\u0434\u043a\u043b\u044e\u0447\u0430\u0442\u044c \u0438\u0445 \u043a \u043c\u043e\u0434\u0435\u043b\u0438 \u043e\u0434\u043d\u043e\u0432\u0440\u0435\u043c\u0435\u043d\u043d\u043e, \u0438\u0441\u043f\u043e\u043b\u044c\u0437\u0443\u044f \u043f\u0440\u0435\u0438\u043c\u0443\u0449\u0435\u0441\u0442\u0432\u043e \u043a\u0430\u0436\u0434\u043e\u0433\u043e.<br \/>  <br clear=\"all\"\/>  <\/p>\n","protected":false},"author":1,"featured_media":0,"comment_status":"open","ping_status":"open","sticky":false,"template":"","format":"standard","meta":{"footnotes":""},"categories":[],"tags":[],"class_list":["post-264993","post","type-post","status-publish","format-standard","hentry"],"_links":{"self":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264993","targetHints":{"allow":["GET"]}}],"collection":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts"}],"about":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/types\/post"}],"author":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/users\/1"}],"replies":[{"embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcomments&post=264993"}],"version-history":[{"count":0,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=\/wp\/v2\/posts\/264993\/revisions"}],"wp:attachment":[{"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fmedia&parent=264993"}],"wp:term":[{"taxonomy":"category","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Fcategories&post=264993"},{"taxonomy":"post_tag","embeddable":true,"href":"https:\/\/savepearlharbor.com\/index.php?rest_route=%2Fwp%2Fv2%2Ftags&post=264993"}],"curies":[{"name":"wp","href":"https:\/\/api.w.org\/{rel}","templated":true}]}}